Включение пакетов nuget в кроссплатформенную программу VS2019 C ++ - PullRequest
0 голосов
/ 21 октября 2019

Мне было поручено начать разработку кроссплатформенной программы на C ++ с CMake. Одна из наших основных зависимостей включает в себя собственные пакеты nuget. В наших проектах для Windows C ++ я бы просто щелкнул правой кнопкой мыши по проекту и выбрал Управление пакетами Nuget . В кроссплатформенности такой возможности нет, и я изо всех сил пытаюсь найти какую-либо соответствующую информацию о том, как мне поступить, включая эти зависимости. Кто-нибудь может связать меня с любыми хорошими источниками информации или демо?

1 Ответ

1 голос
/ 21 октября 2019

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...