[英]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.