这不是一个真正的解决方案,只是不同的解决方法。我没有找到问题的根源。
案例 #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,
案例 #4 修改lib%.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
打印有关已完成操作的详细信息,但无法获得最终结果。看来问题是因为有两个目标A.exe
,一个没有收据行。