我正在使用 cmake 和 external project 模块,通过 ExternalProject_Add
。
我想为外部项目指定自定义头文件位置(就像在该项目中使用 include_directories
一样),但我无法修改其 CMakeLists.txt
并且不想应用补丁。
有没有可能向我的外部项目传递一些包含路径?
我尝试了 CMAKE_ARGS -DCMAKE_INCLUDE_PATH=<required path>
,但没有成功。
我正在使用 cmake 和 external project 模块,通过 ExternalProject_Add
。
我想为外部项目指定自定义头文件位置(就像在该项目中使用 include_directories
一样),但我无法修改其 CMakeLists.txt
并且不想应用补丁。
有没有可能向我的外部项目传递一些包含路径?
我尝试了 CMAKE_ARGS -DCMAKE_INCLUDE_PATH=<required path>
,但没有成功。
您可以通过将此脚本的路径分配给变量CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE
(文档)来执行外部项目的其他CMake脚本。
让外部项目使用CMake命令。
project(e_cool)
而且你想执行
include_directories(/path/to/additional/include)
就在那时。
要做到这一点,您需要准备带有相应内容的cmake脚本:
fix_e_cool.cmake:
include_directories(/path/to/additional/include)
请通过主项目中的CMAKE_ARGS选项将此脚本传递给ExternalProject_Add
:
CMakeLists.txt:
...
ExternalProject_Add(<name>
...
CMAKE_ARGS -DCMAKE_PROJECT_e_cool_INCLUDE=${CMAKE_SOURCE_DIR}/fix_e_cool.cmake
)
ExternalProject_Add
命令将选项传递给外部项目,并且我想确定哪个变量负责包含路径。我确实知道我可以通过命令行向当前项目传递参数。 - avtomaton
find_package()
查找头文件,因此您需要设置影响此函数的 CMake 变量。或者您的情况不同吗? - Tsyvarevinclude_directories()
指向此位置,但对于外部项目,我无法访问CMakeLists.txt
,并且我想在我的顶级cmake中为该项目设置环境。我已经发现CMAKE_INCLUDE_PATH
绝对不是我要找的东西。 - avtomatoninclude_directories()
。其他可能性是通过额外的-I
选项传递CMAKE_CXX_FLAGS
,甚至重新定义已经具有此选项的编译器。 - TsyvarevFind<package>.cmake
,<package>Config.cmake
或者甚至是CMakeLists.txt
,但是提供了头文件和库。我所需要做的就是指定位置,在那里我可以拥有头文件。就像在我的自己的CMakeLists.txt
中使用include_directories
一样。是的,我已经找到了使用CMAKE_CXX_FLAGS
的解决方案,但它看起来像一个技巧,并且并不完全可移植。封装似乎更加糟糕。但感谢您的评论。我只是好奇为什么在如此强大的构建系统中缺少如此简单的东西。 - avtomatonCMAKE_PROJECT_<PROJECT-NAME>_INCLUDE
(文档链接)。根据其描述,它允许将代码注入到外部项目构建中。看起来这正是您要查找的内容。 - Tsyvarev