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