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

标签 c cmake config include-path

我使用 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 and CMAKE_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_DIRCMAKE_CURRENT_BINARY_DIR 中查找。

关于c - 如何确保生成的 config.h 文件在包含路径中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48580399/

相关文章:

c - 无法将变量类型转换为指针类型(例如,将int转换为int *)。我想这是一件坏事,但是为什么不可能呢?

c - 不在其运行时库中拆分参数的 Windows C 编译器?

python - 使用pip_pypy3安装pyarrow时出现 "Could NOT find Arrow"错误

c++ - Windows下使用MinGW-w64编译Qt5 hello world.cpp文件报 "undefined reference"错误

Apache 服务器 : Editing httpd. conf 文件(权限被拒绝)

c - 在C中以微秒为单位制作定时循环

C、获取给定指针的内存段

c++ - CMakeLists.txt中如何指定CMake的安装路径

java - @PropertySource 中的类路径通配符

laravel - 无法更改 Laravel 中的默认文件系统磁盘,因为 filesystem.php 中的设置被忽略