【发布时间】:2021-03-23 00:01:01
【问题描述】:
假设我有一个 C++ 源文件,如下所示:
int main() {
...
#ifdef flag
// do something
#endif
...
#ifndef flag
// do something different
#endif
...
}
我知道对于 gcc,我可以使用-D'flag' 作为预处理器的指令来定义flag,从而确定上面代码的哪一部分实际被编译,并且可以在 Makefile 中使用。
但是如何编写一个 Makefile 以便根据我是否要定义 flag 重新构建源文件(不对任何文件进行其他更改,包括 Makefile 本身)?
我知道我可以,例如(如果有更好的方法,解决方案不需要遵循这个!),当我运行 make 时定义一个变量,例如make flag=1 all,但如果包含 main 的文件(与上面的源代码示例一致)此后未更改,则不会触发重建。
即从一个干净的目录开始并运行make all 将运行构建,但是如果我立即运行make flag=1 all,我希望正确重建包含main(比如main.cpp)的文件,而不必先touch main.cpp .
【问题讨论】:
-
我建议使用 cmake。如果您使用更改的标志运行 cmake,它会重建目标。
-
上次构建是否使用标志的“记忆”必须存储在某处。 Make 可以编写一个文件来记录该信息。这种方法可以接受吗?
-
@Beta 有兴趣看看它是如何工作的,谢谢
标签: c++ gcc makefile gnu-make preprocessor-directive