我有一个 makefile,它从命令行获取一个变量并将其传递给编译器(用于 C++ 预处理器)。
代码如下:
bar=0
file.o: foo.cpp
ifeq($(bar), 0)
g++ file.cpp -D foo=1 -o file.o
else
g++ file.cpp -D foo=0 -o file.o
endif
问题是运行之后
make bar=0
然后
make bar=1
它说 foo.o 是最新的(确实如此,但我希望它重建,因为代码中的变量已更改)。
最佳答案
如果一个人诉诸于强制重建或清理,那么使用 Make
是毫无意义的。此处正确的方法是实现一个行为类似于文件的“可依赖变量”。如果 bar
是这样一个变量,你可以说
file.o: foo.cpp bar
(your recipe here)
这意味着,如果 bar
的“内容”(值)发生变化,您需要重新构建。
有关如何实现依赖变量的详细信息,请参阅我的帖子
关于c++ - Makefile 并不总是重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26652170/