讲师中心 微信公众号
AI工具推荐 视频效率加速

c++怎么在CMake中使用FetchContent来管理依赖_C++项目依赖管理与CMake技巧

胖婷姑娘_3105

胖婷姑娘_3105

发布时间:2025-11-14 18:57:18

|

1036人浏览过

|

来源于php中文网

原创

FetchContent是CMake 3.14引入的模块,用于在构建时自动下载并集成第三方库。通过FetchContent_Declare声明依赖源(如Git仓库或ZIP包),再调用FetchContent_MakeAvailable触发下载与配置,使外部库成为项目的一部分,支持直接链接目标。相比ExternalProject_Add更简单直观,适合现代CMake工作流,推荐结合find_package优先查找系统库,未找到时回退到网络获取,提升构建效率与可移植性。

c++怎么在cmake中使用fetchcontent来管理依赖_c++项目依赖管理与cmake技巧

在现代C++项目中,依赖管理是一个关键环节。使用CMake的FetchContent模块可以让你在构建时自动下载并集成第三方库,无需手动管理子模块或外部构建流程。这种方式特别适合开源项目或团队协作开发,简化了构建环境的配置。

什么是FetchContent?

CMake 3.14引入了FetchContent模块,它允许你在CMake脚本中声明外部依赖,并在配置阶段自动获取(如从Git仓库、tar包等),然后像普通子目录一样将其包含进项目中。

相比传统的ExternalProject_AddFetchContent更简单直观,所有内容都在本地构建树中,支持直接链接目标(target_link_libraries),更适合现代CMake工作流。

基本用法:添加一个第三方库

以引入nlohmann/json为例,展示如何使用FetchContent

立即学习C++免费学习笔记(深入)”;

cmake_minimum_required(VERSION 3.14)
project(MyApp)

include(FetchContent)

FetchContent_Declare(
  nlohmann_json
  GIT_REPOSITORY https://www.php.cn/link/b82e68e6366d4177332acdf3fa4d1e3a.git
  GIT_TAG        v3.11.2
)

FetchContent_MakeAvailable(nlohmann_json)

上面代码做了三件事:

MergeIQ: Automatically Score & Prioritise PR Complexity for GitLab and GitHub
MergeIQ: Automatically Score & Prioritise PR Complexity for GitLab and GitHub

使用四维度框架评估任意 GitLab MR 或 GitHub PR 的复杂度:规模(20%),认知负荷(30%),审查工作量(30%),风险/影响(20%)...

下载
  • 声明依赖源:通过FetchContent_Declare指定Git地址和标签版本。
  • 触发下载与配置FetchContent_MakeAvailable会下载内容并调用其CMakeLists.txt,使其成为项目的一部分。
  • 可用性:之后就可以使用nlohmann_json::nlohmann_json这样的目标进行链接。

接着在你的可执行文件中使用它:

add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE nlohmann_json::nlohmann_json)

支持多种获取方式

FetchContent_Declare支持多种来源:

  • Git仓库:使用GIT_REPOSITORYGIT_TAG(推荐使用确切tag)。
  • HTTP压缩包URL https://example.com/zipfile.zip
  • 本地路径SOURCE_DIR /path/to/local/dir,便于本地调试。

例如使用ZIP包:

FetchContent_Declare(
  fmt
  URL https://github.com/fmtlib/fmt/releases/download/10.0.0/fmt-10.0.0.zip
)
FetchContent_MakeAvailable(fmt)

然后链接fmt::fmt即可。

优化体验的小技巧

  • 避免重复下载:CMake会在构建目录中缓存已下载的内容,清理构建目录才会重新下载。
  • 离线构建支持:可通过预设SOURCE_DIR跳过网络请求,适合CI/CD或无网环境。
  • 统一管理多个依赖:可将所有FetchContent_Declare集中在一个dependencies.cmake文件中再include。
  • 控制是否启用内部版本:结合find_package()优先查找系统安装版本,找不到再用FetchContent回退:
    find_package(nlohmann_json 3.11.2 QUIET)
    if(NOT nlohmann_json_FOUND)
      FetchContent_Declare(...)
      FetchContent_MakeAvailable(nlohmann_json)
    endif()
    

基本上就这些。FetchContent让C++项目的依赖管理变得轻量又可靠,尤其适合中小型项目快速集成常用库。只要确保CMake版本够新,就能享受“开箱即用”的便捷体验。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1955

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2602

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

896

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2919

2025.09.10

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

5019

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

1560

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

894

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3257

2024.04.09

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

0

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 20.5万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn