提问者:小点点

C/C++预处理器指令的Makefile触发器重建


假设我有一个C++源文件,如下所示:

int main() {
...
#ifdef flag
    // do something
#endif
...
#ifndef flag
    // do something different
#endif
...
}

我知道对于gcc,我可以使用-d'flag'作为对预处理器的指令来定义flag,从而确定上面的代码的哪一部分实际得到编译,并且这可以在makefile中使用。

但是,如何编写生成文件,以便根据是否需要定义flag重新构建源文件(不对任何文件进行其他更改,包括生成文件本身)?

例如,我知道我可以在运行make时定义一个变量(如果有更好的方法,解决方案就不需要这么做!),例如,用makeflag=1all定义一个变量,但是如果包含main的文件(与上面的源代码示例一致)此后没有更改,那么这将不会触发重新生成。

即从一个干净的目录开始并运行makeall将运行构建,但是如果立即运行makeflag=1all,我希望包含main(例如main.cpp)的文件能够正确地重建,而不必首先触摸main.cpp


共1个答案

匿名用户

您可以为代码创建对Makefile的依赖项。它将在Makefile更改时触发编译。

或者使用cmake,那么您的IDE将/应该为您完成这些。。。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c|c++|预|处理器|指令|makefile|触发器|重建)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?