如何确保生成的 config.h 文件在包含路径中?

How to ensure a generated config.h file is in the include path?

我使用 CMake 构建一个 C 项目。具体来说,我使用以下行:

configure_file(config.h.in config.h @ONLY)

只要我在源目录中构建,它就可以正常工作。但是,如果我在其他地方构建,config.h 文件将在 /path/to/build/dir/config.h 中创建,而不是在源目录中创建 - 这不是包含路径的一部分。我怎样才能拥有 CMake...

CMake 中 CMAKE_INCLUDE_CURRENT_DIR 包含目录的自动机制:

set(CMAKE_INCLUDE_CURRENT_DIR ON)

If this variable is enabled, CMake automatically adds CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_BINARY_DIR to the include path for each directory.

所以我更愿意根据需要在我的 CMakeLists.txt 中单独进行以下调用:

include_directories("${CMAKE_CURRENT_BINARY_DIR}")

编辑:感谢@zaufi 的提示,如果您生成的头文件具有目标范围,那么您应该更喜欢(CMake >= 版本 2.8.12)来制作它仅对该目标可见(并非对所有目标全局可见):

target_include_directories(MyLibrary PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")

注意:对于具有相对路径的源文件,CMake 在两个目录 CMAKE_CURRENT_SOURCE_DIRCMAKE_CURRENT_BINARY_DIR.

中查找