我正在为我正在使用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,为什么这不起作用?
答案 0 :(得分:1)
$@
之类的自动变量仅在配方中有意义:make
在完全解析依赖关系行之后计算它们。解释依赖项$@
时设置为空。你必须明确拼写出来:
$(CXXCPP): $(CXXTEST)
cxxtestgen ... (this line may use $@, $^, etc)