使目标变量导致没有输入文件

问题描述:

我想在生成文件中使用以下内容,但是当我输入make filter_test它给了我下面的错误,我不明白为什么。请注意输入文件应该在的空间。使目标变量导致没有输入文件

CXX=g++ 
CXXFLAGS=-O1 -pedantic -Wall -Werror -g 
DEPS=p2.o recursive.o [email protected] 

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

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

filter_test: p2.o [email protected] recursive.o ; $(CXX) $(CXXFLAGS) recursive.o p2.o [email protected] -o aaa 

输出:

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

[email protected]只有配方内的值,所以当make看到[email protected]的先决条件列表,它把它作为一个空字符串。所以make正在尝试构建先决条件.cpp并使用默认规则来构建它。要解决这个问题,请写:

filter_test: p2.o filter_test.cpp recursive.o 

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

+0

谢谢,我不知道它只在配方中有效。当你说“让使用默认规则”时,默认规则是什么意思? –

+0

如果不指定配方,'make'具有默认规则,用于使用具有.o,.c,.cpp以及任何其他许多后缀的相似命名文件构建可执行文件。该规则将使用诸如“$ CC”,“$ CCFLAGS”等变量 –