Могу ли я управлять QuantLib (красиво) с помощью CMake и vcpkg? - PullRequest
1 голос
/ 11 июля 2020

Я хотел бы использовать vcpkg для управления своими пакетами. Я также хотел бы использовать CMake для управления своими сборками. Можно ли включить библиотеку Quantlib, не прибегая к жестко закодированным ссылкам? Что-то вроде find_package (Quantlib)?

РЕДАКТИРОВАТЬ: То, что я пытался далеко (отказ от ответственности - я новичок в этом. Такое ощущение, что я ищу в темноте. Этот раздел немного меняет мое невежество слишком прозрачно) Во-первых, это чистая сборка и у меня нет ограничений обратной сопоставимости. Моя цель - создать что-то, что я могу использовать между моими средами Linux и Windows. Я использую VSCode для редактирования своего кода и CMake. Моей ссылкой здесь была библиотека Boost. То, как я это успешно использовал (и заголовок только на данный момент), было

find_package(Boost ${BOOST_VERSION} REQUIRED) 
if (Boost_FOUND)
  include_directories(${Boost_INCLUDE_DIRS})
else()
   MESSAGE("BOOST not found")
endif()

На сегодняшний день я добиваюсь прогресса в следующих строках (я не уверен на 100%, что это еще работает, но Я верю, что перейду к черту):

set(QUANTLIB_DIR "E:/SD/Programming/C++/vcpkg/installed/x64-windows"
    CACHE PATH "The path to the quantlib directory")
include_directories(${QUANTLIB_DIR})
add_library(quantlib STATIC IMPORTED)
set_target_properties(quantlib PROPERTIES IMPORTED_LOCATION ${QUANTLIB_DIR}/lib/QuantLib-vc141-x64-mt.lib)
add_library(quantlibDebug STATIC IMPORTED)
set_target_properties(quantlibDebug PROPERTIES IMPORTED_LOCATION ${QUANTLIB_DIR}/debug/lib/QuantLib-vc141-x64-mt-gd.lib)

Если мне нужно действовать таким образом (зависит от системы, зависит от сборки), мне понадобятся такие разделы для каждой среды. Я надеялся, что использование диспетчера пакетов с CMake позволит мне использовать системные переменные c в моей сборке. Я наивен?

1 Ответ

0 голосов
/ 12 июля 2020

Я использую AutoVcpkg для интеграции vcpkg в CMake, что избавляет вас от управления каталогами зависимостей вручную. Обычно вы начинаете с определения каталога установки vcpkg. Я использую переменную среды VCPKG_ROOT в качестве значения по умолчанию (однако вы можете указать что-то еще, используя переменную сборки, если у вас несколько установок vcpkg):

INCLUDE (AutoVcpkg)
SET (AUTO_VCPKG_ROOT $ENV{VCPKG_ROOT})

Затем вы можете использовать VCPKG_INSTALL макрос для установки нужной библиотеки:

VCPKG_INSTALL(quantlib)
FIND_PACKAGE(quantlib REQUIRED)
TARGET_LINK_LIBRARIES(MyProject PUBLIC quantlib)
...