假设我有一个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
。
您可以为代码创建对Makefile的依赖项。它将在Makefile更改时触发编译。
或者使用cmake,那么您的IDE将/应该为您完成这些。。。