我可以使用 CMake 和 vcpkg(很好地)管理 QuantLib 吗?
Can I manage QuantLib (nicely) with CMake and vcpkg?
我想使用 vcpkg 来管理我的包。我还想使用 CMake 来管理我的构建。是否可以在不使用硬编码链接的情况下包含 quantlib 库?像 find_package(quantlib)?
编辑:我已经尝试过的事情(免责声明 - 我是新手。感觉就像我在黑暗中摸索。这部分让我的无知有点过于透明)
首先,这是一个干净的构建,我没有向后可比性限制。我的目标是创建我可以在 Linux 和 Windows 环境之间使用的东西。我正在使用 VSCode 来编辑我的代码和 CMake。
我在这里参考的是 Boost 库。我成功使用它的方式(并且 header 仅在这一点上)是
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 中使用包管理器可以让我在我的构建中使用系统不可知变量。我天真吗?
我正在使用 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)
我想使用 vcpkg 来管理我的包。我还想使用 CMake 来管理我的构建。是否可以在不使用硬编码链接的情况下包含 quantlib 库?像 find_package(quantlib)?
编辑:我已经尝试过的事情(免责声明 - 我是新手。感觉就像我在黑暗中摸索。这部分让我的无知有点过于透明) 首先,这是一个干净的构建,我没有向后可比性限制。我的目标是创建我可以在 Linux 和 Windows 环境之间使用的东西。我正在使用 VSCode 来编辑我的代码和 CMake。 我在这里参考的是 Boost 库。我成功使用它的方式(并且 header 仅在这一点上)是
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 中使用包管理器可以让我在我的构建中使用系统不可知变量。我天真吗?
我正在使用 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)