繁体   English   中英

用于 CMake 的 NuGet 感知 find_package

[英]A NuGet-aware find_package for CMake

我正在使用 CMake 构建一个跨平台库,它有一些(非常常见的)依赖项(例如 PCRE)。 依赖项可通过常用的包管理器(Ubuntu/Debian 上的 APT,OSX 上的 Homebrew)以及 Windows 上的 NuGet 获得。 在我的CMakeLists.txt ,我使用find_package的“模块”版本来定位这些依赖项并设置正确的包含/库标志。

这个问题提供了一种集成 CMake + NuGet 的方法,但也表明 CMake 和 NuGet 不太可能一起玩,而且我似乎无法找到一种方法来获取find_package以查找已安装的依赖项。 有没有办法让 CMake 读取 NuGet 配置文件(就像pkg_check_modules在带有pkg-config系统上工作的方式)并从那里填充适当的 CMake 变量? 还是我必须在FindPCRE.cmake手动滚动我自己的解决方案?

作为(有点肮脏的)解决方法,我依赖于存在并使用的nuget cli 工具

find_program(NUGET nuget)
if(NOT NUGET)
  message(FATAL "Cannot find nuget command line tool.\nInstall it with e.g. choco install nuget.commandline")
else()
  execute_process(COMMAND ${NUGET} install foolib)
endif()

从 CMake 3.15 开始,CMake 现在支持使用VS_PACKAGE_REFERENCES引用 Nuget 包,而无需 Nuget CLI 或引用的硬编码路径。 要将 Nuget 包引用添加到 CMake 目标,我们可以使用语法<package-name>_<package-version> 下面是 Nuget 日志包Serilog版本 2.9.0 的一个简单示例:

set_property(TARGET MyLibrary
    PROPERTY VS_PACKAGE_REFERENCES "Serilog_2.9.0"
)

链接的文档显示了如何通过分号分隔添加多个Nuget 包; 包参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM