【发布时间】:2011-03-06 11:20:49
【问题描述】:
假设我有文件:
库:
- one.cpp, one.h
- 两个.cpp,两个.h
- 三个.cpp,三个.h
程序:
- program.cpp
有没有办法创建只编译从上次编译中修改的 *.cpp 的 Makefile?
目前我有类似的东西:
SRCS = one.cpp two.cpp three.cpp
OBJS = $(SRCS:.cpp=.o)
all: $(OBJS) program
.cpp.o:
g++ -Wall -c $<
program:
g++ -Wall $(OBJS) program.cpp -o program
clean:
rm -f $(OBJS) program
我工作正常,但是当我编译我的程序然后更改 two.cpp 或 two.h 时,我需要先运行“make clean”,因为当我第二次运行“make”时,我得到:
Nothing to be done for 'all'.
我想以这种方式更改我的 Makefile,它会识别我的更改并重新编译该文件及其依赖项(如果 one.cpp 使用来自 two.cpp 的已修改代码,则应重新编译这两个文件)。
所以如果我修改两个.cpp,make应该这样做:
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
但是如果 one.cpp 使用了 two.cpp 中的修改过的代码,那就做吧:
g++ -Wall -c one.cpp
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
【问题讨论】:
-
(我想你的意思是
one.cpp,而不是first.cpp。)