cmake:将包含目录传递给外部项目
我正在通过cmake:将包含目录传递给外部项目,cmake,Cmake,我正在通过ExternalProject\u Add使用cmake和模块 我想为外部项目指定自定义标题位置(就像我在该项目中使用include_目录,但我无法修改它的CMakeLists.txt,不想应用补丁) 是否有可能将一些include路径传递给我的外部项目 我尝试了CMAKE\u ARGS-DCMAKE\u INCLUDE\u PATH=,但没有成功。使用将允许您从命令行传递数据,例如: cmake -DHEADER_PATH="/usr/my/path/file.h" .. 通过将此
ExternalProject\u Add
使用cmake和模块
我想为外部项目指定自定义标题位置(就像我在该项目中使用include_目录
,但我无法修改它的CMakeLists.txt
,不想应用补丁)
是否有可能将一些include路径传递给我的外部项目
我尝试了CMAKE\u ARGS-DCMAKE\u INCLUDE\u PATH=
,但没有成功。使用将允许您从命令行传递数据,例如:
cmake -DHEADER_PATH="/usr/my/path/file.h" ..
通过将此脚本的路径指定给变量
CMake_project__INCLUDE
(),可以为外部项目执行其他CMake脚本
让外部项目使用CMake命令
project(e_cool)
你想执行吗
include_directories(/path/to/additional/include)
那一刻
为此,您需要准备带有相应内容的cmake脚本:
修复冷却。cmake:
include_directories(/path/to/additional/include)
...
ExternalProject_Add(<name>
...
CMAKE_ARGS -DCMAKE_PROJECT_e_cool_INCLUDE=${CMAKE_SOURCE_DIR}/fix_e_cool.cmake
)
并通过主项目中ExternalProject\u Add
的CMAKE_ARGS选项传递此脚本:
CMakeLists.txt:
include_directories(/path/to/additional/include)
...
ExternalProject_Add(<name>
...
CMAKE_ARGS -DCMAKE_PROJECT_e_cool_INCLUDE=${CMAKE_SOURCE_DIR}/fix_e_cool.cmake
)
。。。
外部项目添加(
...
CMAKE_ARGS-DCMAKE_PROJECT_e_cool_INCLUDE=${CMAKE_SOURCE_DIR}/fix_e_cool.CMAKE
)
你误解了我。我希望通过ExternalProject\u Add
命令将选项传递给外部项目,并确定哪个变量负责包含路径。我肯定知道我可以通过命令行将参数传递给当前项目。您要添加的目录中有什么类型的头?如果它们与某个3d party库相关,那么外部项目可能会查找带有find_package()
的标题,因此您需要设置CMake变量,这会影响此函数。还是你的案子不一样?@Tsyvarev:我的案子不一样。外部项目仅在某些自定义位置包含标题。例如,对于主项目,我可以使用include_directories()
指向此位置,但对于外部项目,我无法访问CMakeLists.txt
,我希望在顶级cmake中将环境设置为该项目。我已经发现,CMAKE\u INCLUDE\u PATH
绝对不是我要寻找的wnat。因此,对于编写糟糕的外部项目,您需要解决方法<代码>例如,对于主项目,我可以使用include_directories()指向此位置-您可以包装外部项目,就好像它是在子目录中编译的一样,include_directories()
是在顶级(方便编写的)CMakeLists.txt中发布的。其他可能是通过附加的-I
选项传递CMAKE\u CXX\u标志
,或者甚至重新定义已经有此选项的编译器。我需要在编写糟糕的操作系统中为编写糟糕的包管理器解决问题:)令人惊讶的是,并非每个项目都提供Find.CMAKE
,Config.cmake
甚至CMakeLists.txt
,但提供了标题和库。我所需要的只是指定可以有标题的位置。就像在我自己的CMakeLists.txt
中包含_目录一样。是的,我已经找到了带有CMAKE\u CXX\u标志的解决方案
,但它看起来像是一个把戏,并且不是完全可移植的。包装似乎更糟糕。但是谢谢你的评论。我只是好奇在如此强大的构建系统中缺少如此简单的东西。发现变量CMAKE_PROJECT___包括()。根据它的描述,它允许将代码注入到外部项目构建中。看起来这就是你要搜索的。