「複数のターゲットパターン」Makefileエラー


82

私のメイクファイルはエラーで失敗します:

Makefile:34: *** multiple target patterns.  Stop.

それは本当にどういう意味ですか、どうすればこれを修正できますか?

(CaptainObviousによって書かれたGNUmakeマニュアルは役に立ちません)。


それを見つけた。私は形式でルールを持っていました:

$(FOO): bar

FOOコロンを含むエラーメッセージで汚染されたシェルコマンドから設定された場所。




これらの答えは、「複数のターゲットパターンがある」という言い換えにすぎません。まあ、私はそうは思わない。どうすれば確認できますか?何がそれを引き起こすことができますか?この問題を防ぐには、どのような予防措置が必要ですか?
Kornel

2
すべてが1分間機能し、その後、私のスクリプトが(セミ)コロンをくしゃみをしました... 私があなたと@mcrの答えを見つける前に、少なくとも3時間、問題を見つけようとして汗を流しました。あなたは私にバケツ一杯の汗を救った!
GuruM 2012年

この問題の真の根本原因は、GNUMakeが数十年前に死んだはずの恐ろしい糞であることにあります。
2018

回答:


62

Makefileにありました

MAPS+=reverse/db.901:550:2001.ip6.arpa 
lastserial:  ${MAPS}
    ./updateser ${MAPS}

これ:は、ファイル名にが含まれているためです。私はこれを解決しました

                      --------通知
                     //
                    vv
MAPS + = reverse / db.901 \:550 \:2001.ip6.arpa
lastserial:$ {MAPS}
    ./updateser $ {MAPS}

1
私は同じ問題を抱えている、しかし、私は、あなたの答えを理解していないあなたは、私のためにこれをさらに詳しく説明します
のPir Fahimシャー

4
@PirFahimShah答えは、ファイル名(db.901:550:2001.ip6.arpa)のコロンをエスケープする必要があることです。mcrは、コロンの前に円記号を付けることによってコロンをエスケープしています。そうすれば、makeはコロンを特別な記号として解釈しません。
Loduwijk 2016

1
おかげで、それは私のために働いた。C:/Qt/5.8/mingw53_32/bin/rcc.exeMakefileルールの1つに、コロンが含まれる古いWindowsパス()がいくつかありました。Linuxマシンでビルドしている場合は、自動生成されたメイクファイルを削除します
Vadim Kotov 2017

Windows makeがwsl(ubuntu)に切り替わり、このエラーが発生したmake clean後、make解決しました。誤った行は_build/nrf52840_xxaa/app_mpu.c.o: ../../../app_mpu.c \
Tyeth 2010

22

元の回答のようにコロンをエスケープする必要があることに加えて、インデントがオフの場合、同じ問題が発生する可能性があることがわかりました。1つのmakefileで、スペースをタブに置き換える必要があり、それによってエラーを乗り越えることができました。


この場合、GNUmakeは「ターゲットのルールなし」を報告する場合もあります。
davenpcj 2013

4

追加したいのですが、Cygwin makeと自動生成ファイルを使用しているためにこのエラーが発生した場合は、次のsedで修正できます。

sed -e 's@\\\([^ ]\)@/\1@g' -e 's@[cC]:@/cygdrive/c@' -i filename.d

最初の置換でエスケープリストにスペース以外の文字を追加する必要があるかもしれませんが、あなたはその考えを理解します。ここでの概念は、/ cygdrive / cがcのエイリアスであるということです:cygwinのmakeが認識します。

そして、投げ入れたほうがいい

-e 's@^ \+@\t@'

偶然にスペースから始めた場合に備えて(私は/ think /これは通常「区切り文字がありません」エラーになりますが)。


3

私は同じエラーに遭遇しました。苦労したところ、フォルダ名の「スペース」が原因であることがわかりました。

例えば ​​:

以前の私のフォルダ名は「QtProjects」でした

後で私はそれを「QtProjects」に変更しました

そして私の問題は解決されました。

その非常に単純ですが、時には大きな問題です。


0

環境変数に問題があったため、この問題(ターゲット名のコロン)が発生し-nましたGREP_OPTIONS。どうやら、これconfigureMakefile間違って生成する原因になりました。


0

IDEがMakefileにスペースとタブの組み合わせを残しました。

タブのみを使用するようにMakefileを設定すると、このエラーが修正されました。


0

また、このエラーが発生しました(Windows上のEclipseベースのSTM32CubeIDE内)。

「複数のターゲットパターン」エラーをダブルクリックすると、.ldファイルへのパスが表示されました。それは別の「違法な性格」の問題であることが判明しました。問題のあるキャラクターは(それを待つ)でした:=

今週のヒューリスティック:他の違法な文字が必ずあるため、パスには[a..z]のみを使用してください</ vomit>。

GNUのメイクマニュアルは、これを明示的に記述されていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.