循环依赖关系丢弃在make文件中的多个可执行文件中

时间:2014-02-11 20:56:11

标签: makefile circular-dependency

exe = mp1
exe2 = compare

mp1: $(exe)
compare: $(exe2)

COMPILER = g++
COMPILER_OPTS = -c -g

LINKER = g++
LINKER_OPTS = 

common_objs = EasyBMP.o 
exe_objs = main.o
exe2_objs = compare.o

$(exe) : $(common_objs) $(exe_objs)
    $(LINKER) $(LINKER_OPTS) $^ -o $@

$(exe2) : $(common_objs) $(exe2_objs)
    $(LINKER) $(LINKER_OPTS) $^ -o $@


EasyBMP.o : EasyBMP.h EasyBMP.cpp EasyBMP_BMP.h EasyBMP_DataStructures.h EasyBMP_VariousBMPutilities.h
    $(COMPILER) $(COMPILER_OPTS) EasyBMP.cpp
main.o : main.cpp
    $(COMPILER) $(COMPILER_OPTS) main.cpp
compare.o : compare.cpp
    $(COMPILER) $(COMPILER_OPTS) compare.cpp

clean:
    -rm *.o $(exe)

当我做比较或制作mp1时,我的循环依赖性下降了。有什么问题??

你也可以解释一下“%^”宏意味着什么吗?

2 个答案:

答案 0 :(得分:0)

你有这个:

exe = mp1
exe2 = compare

mp1: $(exe)
compare: $(exe2)

因此,在扩展变量之后,这是:

mp1: mp1
compare: compare

这意味着“要构建mp1,你必须首先构建mp1,并且要构建比较,你必须首先构建比较”。因此,循环依赖。

我不知道%^你的意思。也许你的意思是$^?在GNU make手册中查找Automatic Variables

答案 1 :(得分:0)

你的第3行和第4行的mp1和比较被定义为导致循环依赖的条件。