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

时间:2018-02-02 10:13:19

标签: c cmake config include-path

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

textField.textProperty().bind(someDoubleProperty, new NumberStringConverter());

只要我在源目录中构建,这就可以正常工作。但是,如果我在其他地方构建,则configure_file(config.h.in config.h @ONLY) 文件在config.h而不是在源目录中创建 - 并且这不是包含路径的一部分。我怎么能有CMake ......

  • 确保包含此特定文件,或
  • 让C编译器同时查看原始源目录下和构建目录下的包含文件吗?

1 个答案:

答案 0 :(得分:3)

在CMake中包含CMAKE_INCLUDE_CURRENT_DIR的目录是自动的:

set(CMAKE_INCLUDE_CURRENT_DIR ON)
  

如果启用此变量,CMake会自动将CMAKE_CURRENT_SOURCE_DIRCMAKE_CURRENT_BINARY_DIR添加到每个目录的包含路径中。

所以我更愿意在我的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两个目录中查找。