本文共629字。
Copyright: 知识共享署名 非商业性使用 相同方式共享 4.0 国际许可协议
|
CC BY-NC-SA 4.0有些我们需要依赖的库,使用vcpkg搜索不到,这时可以使用CMake提供的FetchContent方法去让CMake自动下载依赖库。
接着文章vcpkg示例 - 小木槌的代码Fu-XDU/vcpkg-example at 332a29继续向后添加FetchContent的内容。
添加CMake子模块
在项目根目录下创建文件夹cmake
,我们要在里面放置CMake子模块。
在cmake
下创建文件ProjectCoost.cmake
:
1 2 3 4 5 6 7 8 9 10 11
| include(FetchContent)
FetchContent_Declare( coost GIT_REPOSITORY "https://${URL_BASE}/idealvin/coost.git" GIT_TAG "v3.0.0" SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/deps/src/coost OVERRIDE_FIND_PACKAGE )
FetchContent_MakeAvailable(coost)
|
这就是FetchContent下载一个包的声明过程:
- 把cmake提供的FetchContent包include进来。
- 声明我们要获取的内容,包括其名称、git地址和tag、源码下载位置。
- 使用FetchContent_MakeAvailable去开始下载过程。
随后在项目的CMakeLists.txt
中写入:
1 2 3 4
| include(ProjectCoost)
target_link_libraries(vcpkg_learn PRIVATE cryptopp::cryptopp coost::co)
|
随后即可在自己的项目源码中使用第三方库coost了。
这个项目会在cmake ..
构建时去获取内容。
到目前为止,项目可在GitHub中下载:Fu-XDU/vcpkg-example at 8419a2
FetchContent集成vcpkg
注意,相比于将vcpkg作为git子模块,FetchContent集成vcpkg并不惯用。原因:
文章vcpkg示例 - 小木槌手动在项目中部署了vcpkg,但是FetchContent可以直接下载vcpkg并部署,这里我们将代码Fu-XDU/vcpkg-example at 8419a2进行改造,使FetchContent直接下载vcpkg并部署。
在cmake/
目录下新增文件ProjectVcpkg.cmake
:
1 2 3 4 5 6 7 8 9 10 11 12
| include(FetchContent)
set(PACKAGE_NAME vcpkg)
FetchContent_Declare( ${PACKAGE_NAME} GIT_REPOSITORY "https://${URL_BASE}/microsoft/vcpkg.git" GIT_TAG "2023.08.09" SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/deps/src/${PACKAGE_NAME} )
FetchContent_MakeAvailable(${PACKAGE_NAME})
|
修改CMakeLists.txt
,使其内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| cmake_minimum_required(VERSION 3.26)
set(CMAKE_CXX_STANDARD 14)
if (NOT DEFINED URL_BASE) set(URL_BASE "github.com") endif ()
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
set(VERSION "3.4.0") set(VERSION_SUFFIX "")
include(ProjectVcpkg) set(CMAKE_TOOLCHAIN_FILE "${vcpkg_SOURCE_DIR}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")
project(vcpkg_learn)
include_directories(${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include) link_directories(${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib)
find_package(cryptopp CONFIG REQUIRED)
include(ProjectCoost)
IF (CMAKE_SYSTEM_NAME MATCHES "Darwin") set(other_flags "${other_flags} -frtti -fvisibility-inlines-hidden") set(other_flags "${other_flags} -fvisibility=hidden") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${other_flags}") ENDIF ()
add_executable(vcpkg_learn main.cpp) target_link_libraries(vcpkg_learn PRIVATE cryptopp::cryptopp coost::co)
|
后面再使用cmake ..
去构建项目时,vcpkg会被自动配置并自动下载vcpkg.json中的依赖。
到目前为止,项目可在GitHub中下载:Fu-XDU/vcpkg-example at 987dff