使目标变量导致不输入文件

时间:2013-09-30 01:48:28

标签: makefile

我试图在makefile中使用以下内容,但是当我输入make filter_test时,它会给我下面的错误,我无法弄清楚原因。请注意输入文件应该是的空格。

CXX=g++
CXXFLAGS=-O1 -pedantic -Wall -Werror -g
DEPS=p2.o recursive.o $@.cpp

p2.o: p2.cpp ; $(CXXFLAGS) -c p2.cpp

recursive.o: recursive.cpp ; $(CXXFLAGS) -c recursive.cpp

filter_test:  p2.o $@.cpp recursive.o ; $(CXX) $(CXXFLAGS) recursive.o p2.o $@.cpp  -o aaa

输出:

g++ -O1 -pedantic -Wall -Werror -g         -o .cpp
g++: fatal error: no input files
compilation terminated.
make: *** [.cpp] Error 4

1 个答案:

答案 0 :(得分:1)

$@在配方中只有一个值,因此当make在先决条件列表中看到$@时,它会将其视为空字符串。因此,make正在尝试构建先决条件.cpp并使用默认规则来构建它。要解决这个问题,请写下:

filter_test: p2.o filter_test.cpp recursive.o

将配方留空并让我们使用默认规则。