【发布时间】:2015-07-24 15:18:36
【问题描述】:
我遇到了一个非常奇怪的makefile问题,这里是: 系统:Linux CentOS 6 一开始,makefile的名字是“makefile”,它的示例内容:
OPTFLAGS = -Wall -g -O
CXX = g++
INC = -I/usr/local/include -I/usr/include
LIBS = -L/usr/local/lib -L/usr/lib64
CXXFLAGS = $(OPTFLAGS) $(INC)
SOURCES = file1.cpp file2.cpp file3.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXECUTABLE = mybin
$(EXECUTABLE): $(OBJECTS)
$(CXX) $(CXXFLAGS) $(INC) $(LIBS) $(OBJECTS) -o $@
file1.o : file1.cpp
file2.o : file2.cpp
file3.o : file3.cpp
.PHONY: clean
clean:
rm -f $(EXECUTABLE) *.o core*
运行“make”后出现以下错误: g++: file3.o: 没有这样的文件或目录
我有一个解决方法,可以在 file3 之后添加一个虚拟文件:
dummy.o : dummy.cpp
这样我就可以成功构建。
而且我知道我可以删除所有这些行:
file1.o : file1.cpp
file2.o : file2.cpp
file3.o : file3.cpp
让 make 使用默认设置构建,这样我可以成功构建。
我还尝试将“makefile”重命名为“Makefile”,并且以下行没有虚拟行:
file1.o : file1.cpp
file2.o : file2.cpp
file3.o : file3.cpp
令我惊讶的是,我可以通过这种方式成功构建。
谁能解释为什么我在开头的最后一个文件 3 出现“没有这样的文件或目录”的错误?
以下是错误输出:
g++ -g -Wall -O -I/usr/local/include -I/usr/include -c -o file1.o file1.cpp
g++ -g -Wall -O -I/usr/local/include -I/usr/include -c -o file2.o file2.cpp
g++ -g -Wall -O -I/usr/local/include -I/usr/include -I/usr/local/include -I/usr/include -L/usr/local/lib -L/usr/lib64 -lsybdb file1.o file2.o file3.o -o mybin
g++: file3.o: No such file or directory
make: *** [mybin] Error 1
以下是我添加虚拟行后的输出:
g++ -Wall -g -O -I/usr/local/include -I/usr/include -c -o file1.o file1.cpp
g++ -Wall -g -O -I/usr/local/include -I/usr/include -c -o file2.o file2.cpp
g++ -Wall -g -O -I/usr/local/include -I/usr/include -c -o file3.o file3.cpp
g++ -Wall -g -O -I/usr/local/include -I/usr/include -I/usr/local/include -I/usr/include -L/usr/local/lib -L/usr/lib64 -lsybdb file1.o file2.o file3.o -o mybin
我再次尝试将“makefile”重命名为“Makefile”,但这次不行。
【问题讨论】:
-
你能告诉我们运行
make失败时的exact输出吗? -
@wallyk 不,如果这是问题所在,您会看到类似
make: *** No rule to make target `file3.o'. Stop.的错误信息意味着g++找不到file3.o,这听起来好像无法以某种方式正确创建。 -
无法重现您的问题