如何确保生成的 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...
- 确保包含此特定文件,或者
- C 编译器是否同时在原始源代码目录和构建目录下查找包含文件?
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_DIR
和 CMAKE_CURRENT_BINARY_DIR
.
中查找
我使用 CMake 构建一个 C 项目。具体来说,我使用以下行:
configure_file(config.h.in config.h @ONLY)
只要我在源目录中构建,它就可以正常工作。但是,如果我在其他地方构建,config.h
文件将在 /path/to/build/dir/config.h
中创建,而不是在源目录中创建 - 这不是包含路径的一部分。我怎样才能拥有 CMake...
- 确保包含此特定文件,或者
- C 编译器是否同时在原始源代码目录和构建目录下查找包含文件?
CMake 中 CMAKE_INCLUDE_CURRENT_DIR
包含目录的自动机制:
set(CMAKE_INCLUDE_CURRENT_DIR ON)
If this variable is enabled, CMake automatically adds
CMAKE_CURRENT_SOURCE_DIR
andCMAKE_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_DIR
和 CMAKE_CURRENT_BINARY_DIR
.