0

我正在尝试在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
4

1 回答 1

1

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

filter_test: p2.o filter_test.cpp recursive.o

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

于 2013-09-30T01:55:45.363 回答