让编译器找到Cmake创建的文件

Dav*_*d Z 2 c path cmake out-of-source

我正在使用configure_fileCmake中的命令进行功能可用性检查,如本页所述.该页面建议使用如下命令:

configure_file(config.h.in config.h)
Run Code Online (Sandbox Code Playgroud)

这将转化${CMAKE_CURRENT_SOURCE_DIR}/config.h.in${CMAKE_CURRENT_BINARY_DIR}/config.h.但是当我编译我的程序时,编译器只查找${CMAKE_CURRENT_SOURCE_DIR}头文件(例如config.h),而不是查找${CMAKE_CURRENT_BINARY_DIR}.很自然地,编译器找不到config.h它的生成位置,并且构建失败.

解决此问题的标准方法是什么?我应该更改CMakeLists.txt以便config.h在源目录中创建吗?或者我应该更改它以将构建目录添加到包含路径?(实际上,为什么我必须手动处理这个问题?[半修辞问题])

这个问题涉及类似的问题,但两种选择都被认为是可能的解决方案; 我想知道是否有一个标准的练习,或者这是否表明我错过了一些关于如何使用Cmake的内容.

ste*_*ire 6

保持你的源代码树'原始'是正确的,如果你想做多个不同的构建,或者如果你想通过rm的构建目录来清理构建,那么不这样做是"错误的"如果您正在为源代码生成内容,那就足够了.

在构建目录中生成它并添加包含路径.

设置变量

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
Run Code Online (Sandbox Code Playgroud)

使每个源目录的相应构建目录自动添加,并使其成为其他目标使用的传递行为(因此,例如,foo不必bar显式添加构建目录).

http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#build-specification-and-usage-requirements