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