You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake+FetchContent引入CLI11报错:No content details recorded for cli11

解决CMake FetchContent使用CLI11时的「No content details recorded for cli11」错误

错误核心原因

这个错误本质是FetchContent的声明与调用不匹配,常见触发场景:

  • FetchContent_Declare的名称参数和FetchContent_MakeAvailable的参数拼写不一致(CMake对大小写敏感)
  • FetchContent_Declare语句未被执行(比如放在未触发的条件分支里)
  • 依赖配置顺序错误,导致CMake在链接阶段无法找到已声明的CLI11资源

可复现的错误代码示例

文件结构

.
├── CMakeLists.txt
└── app.cpp

错误的CMakeLists.txt

cmake_minimum_required(VERSION 3.14)
project(CLI11Test)

# 错误:先创建可执行文件,后配置依赖,且存在参数拼写不匹配
add_executable(app app.cpp)

include(FetchContent)
FetchContent_Declare(
  cli11
  GIT_REPOSITORY https://github.com/CLIUtils/CLI11.git
  GIT_TAG v2.3.2
)
# 错误:此处用了大写CLI11,和Declare阶段的小写cli11不匹配
FetchContent_MakeAvailable(CLI11)

target_link_libraries(app PRIVATE CLI11::CLI11)

app.cpp代码

#include <CLI/CLI.hpp>
#include <iostream>

int main(int argc, char** argv) {
    CLI::App app("Test CLI11 App");
    std::string name;
    app.add_option("-n,--name", name, "Your name");
    CLI11_PARSE(app, argc, argv);
    std::cout << "Hello, " << name << "!" << std::endl;
    return 0;
}

修正后的配置方案

正确的CMakeLists.txt

cmake_minimum_required(VERSION 3.14)
project(CLI11Test)

# 1. 先引入FetchContent模块
include(FetchContent)

# 2. 声明CLI11依赖,名称统一用小写cli11
FetchContent_Declare(
  cli11
  GIT_REPOSITORY https://github.com/CLIUtils/CLI11.git
  GIT_TAG v2.3.2  # 指定稳定版本,避免拉取开发分支导致不稳定
)

# 3. 下载并配置CLI11,参数必须和Declare阶段的名称完全一致
FetchContent_MakeAvailable(cli11)

# 4. 创建可执行文件
add_executable(app app.cpp)

# 5. 链接CLI11官方定义的目标
target_link_libraries(app PRIVATE CLI11::CLI11)

# 可选:指定C++标准(CLI11要求C++11及以上)
target_compile_features(app PRIVATE cxx_std_11)

验证步骤

  1. 删除旧构建目录清除缓存:rm -rf build
  2. 重新执行构建流程:
    mkdir build && cd build
    cmake ..
    make
    
  3. 运行测试程序:./app --name Test,输出Hello, Test!即为配置成功。

额外注意事项

  • 若使用CMake 3.13及以下版本,FetchContent_MakeAvailable未被引入,需替换为兼容写法:
    FetchContent_GetProperties(cli11)
    if(NOT cli11_POPULATED)
        FetchContent_Populate(cli11)
        add_subdirectory(${cli11_SOURCE_DIR} ${cli11_BINARY_DIR})
    endif()
    
  • 始终指定具体的GIT_TAG版本,不要直接使用main分支,避免依赖版本变更导致构建失败。

内容的提问来源于stack exchange,提问作者Lars Kakavandi-Nielsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:41:16