基本上我想实现这个工作stream程:
从Windows系统(或任何平台)检索存储库。
运行一些获得依赖关系的工具,包括include和libs,并将它们放在适当的位置(如在Windows上的\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ Lib和\ Includes)
运行CMake(创buildMSVS项目)
打开MSVS项目并编译它。
我想在大多数平台上有这个工作stream程。
我不想手动下载依赖关系
如何做到这一点,而不需要在版本库中存储依赖 达到这个目标的最好方法是什么?
在CMake中,您可以使用file(DOWNLOAD URL PATH)
下载文件 ,将其与自定义命令结合使用来下载和解压:
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 ,它可以做你想做的事情。
Hunter是一个基于CMake 3的依赖管理系统。 它工作得很好,但是还没有很多软件包。 如果你需要的软件包还不是系统的一部分,那么可以简单地添加它们,假设它们也是基于CMake的。
实现这个最好的方法是消除你的依赖。
依赖是邪恶的。
消除他们,而不是依赖于他们。
认真地
实现这个最好的方法是消除你的依赖。
依赖是邪恶的。
消除他们,而不是依赖于他们。
认真。
你不想手动下载它们,你不想将它们存储在你的仓库中,你的客户端不想为你下载它们。 事实上,你的编译器甚至不想编译它们。
喜欢切换到Java来添加一个C库依赖…
与此同时,检查CMake的ExternalProject模块的建议是最接近你将要通过一个基于CMake的构建随时获得非存储库存储的自动依赖关系 – 下载 – 配置 – 构建 – 安装的。