我在充满 .cpp
和 .h
文件的目录中有以下 Makefile:
CFLAGS=-g -std=c++0x -Wall -pedantic -Wextra -D __STDC_LIMIT_MACROS -D __STDC_FORMAT_MACROS -O0
CXX=g++
LDFLAGS=-lgmp -lmathsat -lz3
all: Foo.o Bar.o
$(CXX) $(CFLAGS) -o myexe Foo.o Bar.o $(LDFLAGS)
depend: .depend
.depend: $(wildcard *.cpp)
rm -f ./.depend
$(CXX) $(CFLAGS) -MM $^ > ./.depend
include .depend
%.o: %.cpp
$(CXX) $(CFLAGS) $(INCLUDE) $< -c
clean:
rm -f *.o myexe
当我点击 make
时,它总是会执行最后一步(链接),即使 .o
文件都没有更改。我怎样才能阻止 make
这样做呢?我期望 make
输出 Everything up-to-date
或类似的东西。
我在装有 GNU Make 3.82 和 g++ 4.8.2 版的 i686 GNU/Linux 机器上。
最佳答案
Make 重新链接您的项目,因为它试图构建all
。 all
的规则不会创建任何名为all
的文件。相反,它生成 myexe
。下次你运行 make 时,它会看到没有 all
,但是有一个构建规则运行使。
为了解决您的问题,您需要将 makefile 更改为大致如下所示:
all: myexe
echo Build done
myexe: <myexe dependencies go here>
$(CXX) $(CFLAGS) -o myexe $(wildcard *.o) $(LDFLAGS)
关于c++ - 为什么 GNU make 总是重新链接我的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23371141/