Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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是否有一个;查找或下载并运行build命令“;机制?_Build_Cmake_Package Managers - Fatal编程技术网

CMake是否有一个;查找或下载并运行build命令“;机制?

CMake是否有一个;查找或下载并运行build命令“;机制?,build,cmake,package-managers,Build,Cmake,Package Managers,CMake有一个由一堆FindXYZ脚本(您也可以添加到)支持的脚本 我可以使用什么机制(如果有的话)来告诉cmake:“找到这个包,如果还没有找到,下载它并触发它的构建”——下载和构建部分也由每个包的脚本或设置支持(因此下载可以使用wget或git clone,构建可以使用cmake或maven或特定于包的命令,等等)?是的,我在那个周五被咬了 所以,CMake有一个指令,就是为了这个,必要时获取/更新,配置、构建和安装这个和那个外部项目。太棒了 可悲的是,CMake并没有那么棒 您不能将Ex

CMake有一个由一堆
FindXYZ
脚本(您也可以添加到)支持的脚本


我可以使用什么机制(如果有的话)来告诉cmake:“找到这个包,如果还没有找到,下载它并触发它的构建”——下载和构建部分也由每个包的脚本或设置支持(因此下载可以使用
wget
git clone
,构建可以使用
cmake
maven
或特定于包的命令,等等)?

是的,我在那个周五被咬了

所以,CMake有一个指令,就是为了这个,必要时获取/更新,配置、构建和安装这个和那个外部项目。太棒了

可悲的是,CMake并没有那么棒

您不能将
ExternalProject
定义的目标用作
target\u link\u libraries
中的库。我已经尝试过了

基本问题是,外部项目的更新、构建和安装发生在构建时,而CMake坚持只使用在预构建期间(即在CMake运行期间)找到的库;在运行make/ninja/msvc时,您无法重新检测内容

你可以定义一个自定义目标,告诉它该目标的位置。因此你希望以后链接到该目标,并试图强迫CMake相信你,而无需在预构建时进行检查。遗憾的是,至少在我拥有的CMake版本中,这打破了依赖项跟踪,因此它根本没有构建外部库,因为没有什么需要它


从尝试使用
target\u link\u library
中的外部项目时收到的错误消息来看,CMake似乎认为您只希望在构建时以这种方式安装所需的工具,而不是库。这是一个错误。

您可以使用
${CMAKE_COMMAND}
作为在包含
ExternalProject_Add()
的CMakeLists.txt上调用的命令


您甚至可以
configure_file()
CMakeLists.txt来填写自定义变量,或者动态创建CMakeLists.txt文件。

双cmake'ing呢?就像我们在LaTeX中所做的那样?哈!这对我来说非常偶尔。大多数时候,缓存的“我没有找到那个库”值被重新使用。我不知道如何可靠地重新触发查找。嗯,我没有想到:)但是,
rm${CMAKE\u BIN\u DIR}/CMakeCache.txt
从CMakeLists中听起来是个好主意?从CMakeLists.txt中可能不是。我会使用包装器外壳脚本反复调用cmake。我试图避免使用外壳脚本,因为,你知道,Windows。