これは実際の解決策ではなく、さまざまな回避策です。問題の根本を見つけられませんでした。
ケース #1src/A.cpp
が存在し、makefile が少し変更されています。
#!/usr/bin/make -f
VPATH = src
src%.o: %.cpp
@echo ECHO_1: $@: $<,
lib%.o: %.cpp
@echo ECHO_2: $@: $<,
dll%.so: %.cpp
@echo ECHO_3: $@: $<,
lib%.so: lib%.o dll%.so
@echo ECHO_4: $@: $<,
A.exe: libA.so
# @echo ECHO_45: $@: $<,
%.exe: src%.o
@echo ECHO_5: $@: $<,
yy.mak: ;
出力にエラーが含まれています
make: Circular dllA.so <- A.cpp dependency dropped.
ECHO_2: libA.o: src/A.cpp,
ECHO_3: dllA.so: ,
ECHO_4: libA.so: libA.o,
ECHO_1: srcA.o: src/A.cpp,
ECHO_5: A.exe: srcA.o,
ケース #2 ./A.cpp が存在し、VPATH がコメント化されています。
出力 (エラーなし):
ECHO_2: libA.o: A.cpp,
ECHO_3: dllA.so: A.cpp,
ECHO_4: libA.so: libA.o,
ECHO_1: srcA.o: A.cpp,
ECHO_5: A.exe: srcA.o,
ケース #3 VPATH がコード内にあり、@echo ECHO_45: $@: $<,
行のコメントを解除している
出力:
ECHO_2: libA.o: src/A.cpp,
ECHO_3: dllA.so: src/A.cpp,
ECHO_4: libA.so: libA.o,
ECHO_45: A.exe: libA.so,
ケース #4lib%.so: lib%.o dll%.so
として変更するため、依存関係からlib%.so: lib%.o #dll%.so
削除します。dllA.so
出力 (エラーなし):
ECHO_2: libA.o: src/A.cpp,
ECHO_4: libA.so: libA.o,
ECHO_1: srcA.o: src/A.cpp,
ECHO_5: A.exe: srcA.o,
make -d
何が行われたかについての詳細な情報を印刷するために使用しようとしましたが、最終結果を得ることができませんでした。問題は、ターゲットが 2 つA.exe
あり、1 つに領収書がないことが原因のようです。