簡體   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