CMake FetchContent无法下载jsoncpp依赖问题求助
CMake FetchContent未下载jsoncpp的解决方案
问题根源
CMake的FetchContent_MakeAvailable采用按需执行逻辑:只有当项目中的目标实际引用了被声明的依赖目标时,才会触发依赖的下载、配置与构建流程。你当前的配置仅完成了依赖声明,但未在可执行目标中关联jsoncpp,因此CMake不会启动下载。
修复方案
方案1:关联jsoncpp到可执行目标(推荐)
修改Test目录下的CMakeLists.txt,添加链接jsoncpp库的指令:
# Add source to this project's executable. add_executable (CMakeTarget "Test.cpp") if (CMAKE_VERSION VERSION_GREATER 3.12) set_property(TARGET CMakeTarget PROPERTY CXX_STANDARD 20) endif() # 链接jsoncpp的库目标 target_link_libraries(CMakeTarget PRIVATE jsoncpp_lib) # TODO: Add tests and install targets if needed.
方案2:强制提前下载(无需链接时使用)
若希望不依赖目标关联,直接提前下载jsoncpp,可修改根目录CMakeLists.txt,用FetchContent_Populate替代FetchContent_MakeAvailable:
FetchContent_Declare( jsoncpp GIT_REPOSITORY https://github.com/open-source-parsers/jsoncpp.git GIT_TAG 8190e06 #1.9.5 ) # 强制触发下载与配置 FetchContent_Populate(jsoncpp) # 若需要构建jsoncpp库,添加以下指令 add_subdirectory(${jsoncpp_SOURCE_DIR} ${jsoncpp_BINARY_DIR})
验证步骤
- 删除原构建目录(清除CMake缓存)
- 重新执行CMake配置命令(如
cmake -S . -B build) - 检查构建目录下的
_deps文件夹,若出现jsoncpp-src、jsoncpp-build等子目录,说明下载成功
内容的提问来源于stack exchange,提问作者Dark Sorrow
相关产品推荐
相关产品推荐

