我正在使用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_modules
在pkg-config
的系统上运行的方式)并从那里填充适当的cmake变量?或者我是否必须在FindPCRE.cmake
中手动推出自己的解决方案?
答案 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软件包。