我实际上有一个简单的问题,但找不到答案。也许你可以指出我的拷贝。所以,问题是:是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些 header ,因此不需要放置 #include foo.h? 谢谢!
最佳答案
CMake 没有针对此特定用例的功能,但正如您所暗示的那样,GCC 等编译器具有 -include
标志,就像有一个 #在源文件中包含“foo.h”
,并且由于 CMake 可以将参数传递给编译器,因此您可以通过 add_definitions
来完成。
This answer涵盖了 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
会减慢编译时间。如果您确实需要在所有源文件中使用相同的 header (并且它不是系统 header ),则可能是代码中高耦合的症状。为了什么好处?不必在文件中添加一行?
但是,有必要注意编译器支持它是有原因的;有一些奇怪的边缘情况( example 1 , example 2 ),这是一件有用的事情。
请注意,您这样做是出于正确的原因。
关于c++ - cmake 将 header 包含到每个源文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32773283/