CMake не имеет встроенных команд для поддержки Nuget, поэтому вам нужно будет использовать утилиты командной строки nuget
для включения зависимостей Nuget с помощью CMake.
Вы можете использовать CMakefind_program()
для поиска утилиты командной строки nuget
(после установки) в сочетании с add_custom_command()
или execute_process()
для выполнения nuget
командиз CMake. Ответы на этот вопрос обсуждаются более подробно, но он может выглядеть примерно так:
# Find Nuget (install the latest CLI here: https://www.nuget.org/downloads).
find_program(NUGET nuget)
if(NOT NUGET)
message(FATAL "CMake could not find the nuget command line tool. Please install it!")
else()
# Copy the Nuget config file from source location to the CMake build directory.
configure_file(packages.config.in packages.config COPYONLY)
# Run Nuget using the .config file to install any missing dependencies to the build directory.
execute_process(COMMAND
${NUGET} restore packages.config -SolutionDirectory ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
endif()
Предполагается, что у вас есть существующий файл packages.config
, в котором перечислены зависимости nuget для вашегопроект.
Чтобы связать зависимости с конкретной целью, вы (к сожалению) должны использовать полный путь к nuget
, в котором находится сборка / библиотека.
Для пакетов nuget .NET это будет выглядеть так:
# Provide the path to the Nuget-installed references.
set_property(TARGET MyTarget PROPERTY
VS_DOTNET_REFERENCE_MyReferenceLib
${CMAKE_BINARY_DIR}/packages/path/to/nuget/lib/MyReferenceLib.dll
)
Для пакетов Nuget со вкусом C ++ это может выглядеть следующим образом:
add_library(MyLibrary PUBLIC
MySource.cpp
MyClass1.cpp
...
)
# Provide the path to the Nuget-installed libraries.
target_link_libraries(MyLibrary PUBLIC
${CMAKE_BINARY_DIR}/packages/path/to/nuget/lib/MyCppLib.dll
)
Кроме того, CMake поддерживает создание пакетов Nuget с CPack. Вот документация для генератора CPack Nuget.