我目前正在开发一个桌面应用程序,使用 C++ REST SDK(代号 Casablanca)、Qt5 和其他一些库。
对于项目设置,我使用 CMake。
如何让 CMake 安装 NuGet 包?
如果我重新运行 CMake,我现在每次都必须手动安装它,这不是一个真正的选择。
原文由 Mr.Manhattan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我目前正在开发一个桌面应用程序,使用 C++ REST SDK(代号 Casablanca)、Qt5 和其他一些库。
对于项目设置,我使用 CMake。
如何让 CMake 安装 NuGet 包?
如果我重新运行 CMake,我现在每次都必须手动安装它,这不是一个真正的选择。
原文由 Mr.Manhattan 发布,翻译遵循 CC BY-SA 4.0 许可协议
NuGet 的命令行参考位于 http://docs.nuget.org/docs/reference/command-line-reference
您可以使用 nuget install
或 nuget restore
命令安装软件包。 nuget update
更新安装的包( restore
必须预先运行)。
您可以使用以下命令指示 cmake 在每次构建之前运行 NuGet:
add_custom_command(TARGET ${PROJECT_NAME}
PRE_BUILD
COMMAND nuget restore ${CMAKE_BINARY_DIR}\yourSolution.sln
)
或在配置时使用 execute_process
。
您可以使用 configure_file
或直接使用适当的 nuget install
命令准备 nuget 配置文件。
原文由 Markus Mayer 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
编辑:这个答案不适用于 C++ 项目。
编辑:从 CMake 3.15 开始,CMake 支持使用
VS_PACKAGE_REFERENCES
引用 Nuget 包。现在,这是一个比下面前面提出的解决方法 更 清洁的解决方案。要将 Nuget 包引用添加到 CMake 目标,请使用由_
下划线分隔的包名称和包版本。这是BouncyCastle
版本1.8.5
的示例:该 文档 显示了如何通过分号分隔
;
包来添加 多个 Nuget 包。对于早于 3.15 的 CMake 版本,这是一种潜在的解决方法:
感谢@Markus Mayer 的出色回答。我按照建议运行,但发现如果您 从头开始 生成 VS 项目/解决方案文件,则使用
nuget
命令行不会成立。具体来说,nuget
命令行不会更新项目文件(.csproj
),并且似乎需要一些手动操作来告诉您的项目在哪里可以找到已安装的依赖项。以下步骤概述了我如何为一个具有一个 Nuget 包依赖项的简单项目解决此问题:packages.config
文件(与受影响的.csproj
文件在同一目录中生成)。将副本放入源目录,并将其重命名为packages.config.in
。现在,我们可以使用configure_file
告诉 CMake 在配置阶段将此文件复制回 CMake 二进制目录。如果缺少依赖项,Nuget 将使用它来安装/恢复依赖项。packages
目录中的 CMake 二进制目录中。我们可以使用这个路径告诉 CMake 我们的参考包的位置:
我们还可以在
.csproj
文件中查看此依赖项的安装位置,以验证我们获得了正确的路径(参见HintPath
),并且没有遗漏任何其他依赖项:放在一起,CMake 命令如下所示:
虽然现在这也将为新的 CMake 构建提供 VS 项目的包路径,但有一个警告。如果要升级正在使用的 Nuget 安装包的版本,则必须重新执行上述手动步骤。
TL;DR:这是我用 Nuget 安装的 SQLite 试用的完整
CMakeLists.txt
文件: