Makefile没有按正确的顺序注册依赖项

时间:2016-01-07 21:04:15

标签: c++ build makefile gnu-make

我正在为我正在使用c ++工作的项目编写一个makefile。我有一个名为tests的目录,其中包含用于单元测试的代码,其中包括使用cxxtest的文件。

makefile是:

Video.prototype

但是当我运行LTest.h所在的CC=clang++ CFLAGS=-c -Wall -std=c++11 LDFLAGS= -lsfml-graphics -lsfml-system -lsfml-window SOURCES=memtest.cpp guitest.cpp CXXTEST=LTest.h CXXCPP=$(CXXTEST:.h=.cpp) CXXOBJ=$(CXXTEST:.h=.o) CXXBIN=$(CXXTEST:.h=.bin) MAX_PARALLEL=6 OBJECTS=$(SOURCES:.cpp=.o) BINS=$(SOURCES:.cpp=.b) all: $(CXXBIN) run: all $(CXXCPP): $(subst .cpp,.h,$@) cxxtestgen --error-printer -o $@ $(subst .cpp,.h,$@) $(CXXOBJ): $(subst .o,.cpp,$@) $(CC) $(CFLAGS) -o $@ $(subst .o,.cpp,$@) $(CXXBIN): $(subst .bin,.o,$@) $(CC) $(subst .bin,.o,$@) $(OBJECTS) -o $@ $(OBJECTS): $(subst .o,.cpp,$@) $(CC) $(CFLAGS) $(subst .o,.cpp,$@) -o $@ $(BINS): $(subst .b,.o,$@) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ clean: rm -f LTest.cpp LTest LTest.o guitest guitest.o 时,make正在尝试运行

make LTest

没有首先制作LTest.cpp。

显然, clang++ -c -Wall -std=c++11 -o LTest.o LTest.cpp 扩展到LTest.cpp,为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

$@之类的自动变量仅在配方中有意义:make在完全解析依赖关系行之后计算它们。解释依赖项$@时设置为空。你必须明确拼写出来:

$(CXXCPP): $(CXXTEST)
    cxxtestgen ... (this line may use $@, $^, etc)