我使用 CMake 构建一个 C 项目。具体来说,我使用以下行:
configure_file(config.h.in config.h @ONLY)
只要我在源目录中构建,它就可以正常工作。但是,如果我在其他地方构建,config.h
文件是在 /path/to/build/dir/config.h
而不是在源目录中创建的 - 那就是不是包含路径的一部分。我怎样才能拥有 CMake...
- 确保包含此特定文件,或者
- C 编译器是否在原始源代码目录和构建目录下查找包含文件?
最佳答案
有一个包含目录的自动机制 CMAKE_INCLUDE_CURRENT_DIR
在 CMake 中:
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 >= Version 2.8.12) 使其仅对该目标可见(并非针对所有目标)具有:
target_include_directories(MyLibrary PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
注意:对于具有相对路径的源文件,CMake 在目录 CMAKE_CURRENT_SOURCE_DIR
和 CMAKE_CURRENT_BINARY_DIR
中查找。
关于c - 如何确保生成的 config.h 文件在包含路径中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48580399/