如何在CMakeLists.txt中包含h / hpp头文件,而不是cpp或其他hpp文件

时间:2019-08-07 08:32:51

标签: c++ cmake include header-files

我想知道是否可以直接在CMakeLists.txt中包含头文件,而不是cpp或hpp文件。我正在一个项目中,所有cpp文件都需要包括一些hpp文件。我可以添加

#include "foo.hpp"

在每个cpp文件中,但最好在CMakeLists.txt级别管理包含,并避免在每个cpp文件中添加#include "foo.hpp"

我已经尝试过

 target_include_directories(${PROJECT_NAME} PRIVATE
                           "${PROJECT_PATH}/bar/foo.hpp")

但是它不起作用。甚至可以在cmake级别包括头文件而在cpp文件中不包括头文件吗?如果是,怎么办?

1 个答案:

答案 0 :(得分:2)

是的,但是你不应该。

您可以通过调整变量-include来制作CMake依赖编译器的编译标志(例如CMAKE_CXX_FLAGS for GnuCC):

if(GNU)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include foo.hpp")
elseif(MSVC)
    ...
endif()

尽管建议这样做

  1. 是很多无用的工作;
  2. 利用CMake(其任务是定义与编译器无关的内部版本)来定义依赖于编译器的编译;
  3. 对于任何阅读您的代码的人来说都是一个很大的惊喜;
  4. 破坏IDE遵循标识符的能力(例如,考虑Visual Studio的“查找定义”);
  5. 是一种变通方法。