一个用于cmake的NuGet感知的find_package

时间:2015-08-15 01:53:30

标签: windows cmake nuget

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

This question提供了一种集成cmake + nuget的方法,但也暗示cmake和NuGet不太可能在一起玩得很好,我似乎无法找到获取find_package的方法找到已安装的deps。有没有办法让cmake读取nuget配置文件(pkg_check_modulespkg-config的系统上运行的方式)并从那里填充适当的cmake变量?或者我是否必须在FindPCRE.cmake中手动推出自己的解决方案?

2 个答案:

答案 0 :(得分:6)

作为一种(有点肮脏)的解决方法,我依赖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()

答案 1 :(得分:0)

从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软件包。