c++ - 如何以跨平台方式+CMake自动下载C++依赖?

标签 c++ windows dependencies cmake

基本上我想实现这个工作流程:

  1. 从 Windows 系统(或任何平台)上的存储库中 checkout 。

  2. 运行一些获取依赖项的工具,包括和库,并将它们放在适当的位置(如 Windows 上的“\Program Files\Microsoft Visual Studio 10.0\VC\Lib and\Includes”)

  3. 运行 CMake(在 win 上创建 MSVS 项目)

  4. 打开MSVS项目并编译。

我希望在大多数平台上都有这个工作流程。

我不想手动下载依赖项

如何在不将依赖项存储在存储库中的情况下做到这一点? 实现这一目标的最佳方法是什么?

最佳答案

在 CMake 中,您可以使用 file(DOWNLOAD URL PATH)download a file ,将其与自定义命令结合以下载和解压缩:

set(MY_URL "http://...")
set(MY_DOWNLOAD_PATH "path/to/download/to")
set(MY_EXTRACTED_FILE "path/to/extracted/file")

if (NOT EXISTS "${MY_DOWNLOAD_PATH}")
    file(DOWNLOAD "${MY_URL}" "${MY_DOWNLOAD_PATH}")
endif()

add_custom_command(
    OUTPUT "${MY_EXTRACTED_FILE}"
    COMMAND command to unpack
    DEPENDS "${MY_DOWNLOAD_PATH}")

您的目标应该取决于自定义命令的输出,然后当您运行 CMake 时,将下载该文件,并在您构建、提取和使用时。

这一切都可以封装在一个宏中以使其更易于使用。

您还可以查看使用 CMake 模块 ExternalProject这可能会做你想做的事。

关于c++ - 如何以跨平台方式+CMake自动下载C++依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153519/

相关文章:

c++ - 尝试在 C++ 中返回字符串数组时遇到错误

c++ - Win32 控制台程序中的清理代码

c - 在没有安全协议(protocol)的网页上使用curl

java - 将Java未完成的项目添加到SBT依赖项

c++ - 球坐标映射创建双 epsilons

c++ - 创建 avx vector 的 vector 时出现段错误

c++ - 每个Windows服务都会调用其可执行的main函数吗?

windows - 无法连接到 EC2 实例 - key 解密失败

linux - 如何使用来自 Java 的 GNU 工具链在 Linux 中进行开发?

java - 不同构建配置文件的不同依赖项