私のメイクファイルはエラーで失敗します:
Makefile:34: *** multiple target patterns. Stop.
それは本当にどういう意味ですか、どうすればこれを修正できますか?
(CaptainObviousによって書かれたGNUmakeマニュアルは役に立ちません)。
それを見つけた。私は形式でルールを持っていました:
$(FOO): bar
FOO
コロンを含むエラーメッセージで汚染されたシェルコマンドから設定された場所。
私のメイクファイルはエラーで失敗します:
Makefile:34: *** multiple target patterns. Stop.
それは本当にどういう意味ですか、どうすればこれを修正できますか?
(CaptainObviousによって書かれたGNUmakeマニュアルは役に立ちません)。
それを見つけた。私は形式でルールを持っていました:
$(FOO): bar
FOO
コロンを含むエラーメッセージで汚染されたシェルコマンドから設定された場所。
回答:
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}
C:/Qt/5.8/mingw53_32/bin/rcc.exe
Makefileルールの1つに、コロンが含まれる古いWindowsパス()がいくつかありました。Linuxマシンでビルドしている場合は、自動生成されたメイクファイルを削除します
make clean
後、make
解決しました。誤った行は_build/nrf52840_xxaa/app_mpu.c.o: ../../../app_mpu.c \
元の回答のようにコロンをエスケープする必要があることに加えて、インデントがオフの場合、同じ問題が発生する可能性があることがわかりました。1つのmakefileで、スペースをタブに置き換える必要があり、それによってエラーを乗り越えることができました。
追加したいのですが、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 /これは通常「区切り文字がありません」エラーになりますが)。
また、このエラーが発生しました(Windows上のEclipseベースのSTM32CubeIDE内)。
「複数のターゲットパターン」エラーをダブルクリックすると、.ld
ファイルへのパスが表示されました。それは別の「違法な性格」の問題であることが判明しました。問題のあるキャラクターは(それを待つ)でした:=
今週のヒューリスティック:他の違法な文字が必ずあるため、パスには[a..z]のみを使用してください</ vomit>。
GNUのメイクマニュアルは、これを明示的に記述されていません。