假设我有一个 C++ 源文件,如下所示:
int main() {
...
#ifdef flag
// do something
#endif
...
#ifndef flag
// do something different
#endif
...
}
Run Code Online (Sandbox Code Playgroud)
我知道对于 gcc,我可以用作-D'flag'预处理器的指令来定义flag,从而确定上面代码的哪一部分实际被编译,并且这可以在 Makefile 中使用。
但是我如何编写一个 Makefile,以便根据我是否想要flag定义来重新构建源文件(不对任何文件进行其他更改,包括 Makefile 本身)?
例如,我知道我可以(如果有更好的方法,解决方案不需要遵循这个!),当我运行 make eg with 时定义一个变量make flag=1 all,但是如果文件包含main(与上面的源代码示例一致)此后一直没有更改。
即从一个干净的目录开始并运行make all将运行构建,但是如果我立即运行,make flag=1 all我希望包含main(例如main.cpp)的文件能够正确重建,而不必touch main.cpp首先。