c++ - Makefile 并不总是重建

标签 c++ makefile

我有一个 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 的“内容”(值)发生变化,您需要重新构建。

有关如何实现依赖变量的详细信息,请参阅我的帖子

How do I add a debug option to Makefile

关于c++ - Makefile 并不总是重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26652170/

相关文章:

c++ - 在 std::map 中设置所有值

c++ - STL 优先队列 : When/How Does Resorting Occur?

c++ - 如何为 C 和 C++ 创建一个 makefile,源代码在子目录中

c - linux下如何创建makefile

makefile - 防止两个 make 实例执行同一个目标(并行 make)

c++ - 将 it++ 与 cmake ( QT ) 一起使用

c++ - 用十六进制值编码 std::string

c++ - 带有类模板 typedef 参数的函数模板

c++ - 使用不带 listen() 的 select,可能吗?

ios - 使用theos开发iOS越狱应用