Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cmake:将包含目录传递给外部项目_Cmake - Fatal编程技术网

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___包括
()。根据它的描述,它允许将代码注入到外部项目构建中。看起来这就是你要搜索的。