我实际上有一个简单的问题,但找不到答案。也许您可以指点我。因此,问题是:是否可以告诉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] 删除。
我来说两句