我试图在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
答案 0 :(得分:1)
$@
在配方中只有一个值,因此当make
在先决条件列表中看到$@
时,它会将其视为空字符串。因此,make正在尝试构建先决条件.cpp
并使用默认规则来构建它。要解决这个问题,请写下:
filter_test: p2.o filter_test.cpp recursive.o
将配方留空并让我们使用默认规则。