cmake将头文件包含到每个源文件中

安德烈·切尔尼科夫(Andrei Chernikov)

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

刚果

CMake没有针对该特定用例的功能,但是正如您所暗示的那样,诸如GCC之类的编译器具有-include标志,标志的作用就像#include "foo.h"源文件中存在一样,并且由于CMake可以将参数传递给编译器,因此您可以通过add_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)将对此感到困惑,更不用说其他人在看代码了。如果并非所有源文件实际上都需要定义,则添加extra#include会减慢编译时间。如果实际上在所有源文件中确实都需要相同的标头(而不是系统标头),则这可能是代码中高耦合的征兆。又有什么好处呢?不必在文件中添加一行?

但是,有必要注意,编译器出于某种原因支持它。有一些奇怪的情况(示例1示例2)是一件有用的事情。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章