【发布时间】:2013-07-18 22:25:02
【问题描述】:
我正在尝试使用 GNU make(版本 3.81)构建一个小型 C++ 项目,但我必须调用 make 两次,因为第一次运行失败。这是我的项目目录:
project
makefile
include
lexer.hpp
src
main.cpp
lexer.l
以下是我的makefile:
CC = g++
CPPFLAGS = -I include
VPATH = include src
OBJECTS = main.o lexer.o
test: $(OBJECTS)
$(CC) $(CPPFLAGS) -lfl -o $@ $^
main.o: lexer.hpp main.cpp
$(CC) -c $(CPPFLAGS) $^
lexer.o: lexer.cpp
$(CC) -c $(CPPFLAGS) $^
lexer.cpp: lexer.l
flex -t $^ > src/lexer.cpp
.PHONY: clean
clean:
rm -fR $(OBJECTS) src/lexer.cpp test
我第一次运行 make 时得到以下输出,其中 make 抱怨找不到 lexer.cpp 文件。但我不明白为什么 make 不在 VPATH 中声明的文件夹中寻找。
g++ -c -I include include/lexer.hpp src/main.cpp
flex -t src/lexer.l > src/lexer.cpp
g++ -c -I include lexer.cpp
g++: error: lexer.cpp: No such file or directory
g++: fatal error: no input files
compilation terminated.
make: *** [lexer.o] Error 1
但是,如果我再次调用 make,则会找到 lexer.cpp 并且编译工作正常。
g++ -c -I include src/lexer.cpp
g++ -I include -lfl -o test main.o lexer.o
为什么?
附:我为糟糕的英语道歉。
【问题讨论】:
标签: c++ makefile gnu-make flex-lexer