cmake包含每个源文件的标头

我实际上有一个简单的问题,但找不到答案。 也许你可以指点我一式两份。 所以,问题是:是否可以告诉cmake指示编译器在每个源文件的开头自动包含一些头文件,因此不需要放入#include foo.h? 谢谢!

CMake没有针对这个特定用例的function,但正如你所暗示的那样,GCC之类的编译器有-include标志,就好像源文件中有#include "foo.h" , CMake可以将参数传递给编译器,您可以通过add_definitionsadd_definitions

这个答案涵盖了GCC,Clang和MSVC的标志,它应涵盖很多基础。 因此在CMake中,检测编译器是什么并传递适当的标志。

以下是CMake代码的外观:

 if(MSVC) add_definitions(/FI"foo.h") else() # GCC or Clang add_definitions(-include foo.h) endif() 

评论

一般来说,这样做是个坏主意。 代码检查工具(如IDE或doxygen)将被它混淆,更不用说其他人在看代码了。 如果并非所有源文件实际上都需要定义,则添加额外的#include将减慢编译时间。 如果您在所有源文件中确实需要相同的标头(并且它不是系统标头),则可能是代码中高耦合的症状。 为了什么好处? 不必在文件中添加一行?

但是,有必要注意编译器支持这一点是有原因的; 有一些奇怪的边缘情况( 例子1 , 例子2 ),这是一个有用的事情。

请注意,您出于正确的原因这样做。