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

CMake报错Could NOT find CURL (missing: CURL_LIBRARY)如何解决?

解决FetchContent构建curlpp时找不到CURL依赖的问题

问题重现

使用FetchContent从源码构建curl和curlpp时,执行FetchContent_MakeAvailable(curlpp)出现以下报错:

Could NOT find CURL (missing: CURL_LIBRARY)

相关CMake配置代码如下:

cmake_minimum_required(VERSION 3.17)
project(myproject VERSION 1.0.0)

include(FetchContent)
include(CMakePrintHelpers)

cmake_print_variables(CMAKE_CXX_FLAGS)

if (WIN32)
    set(CMAKE_USE_SCHANNEL ON)
endif()

# --- CURL
FetchContent_Declare(curl
        URL                    https://github.com/curl/curl/releases/download/curl-7_75_0/curl-7.75.0.tar.xz
        URL_HASH               SHA256=fe0c49d8468249000bda75bcfdf9e30ff7e9a86d35f1a21f428d79c389d55675 # the file hash for curl-7.75.0.tar.xz
        USES_TERMINAL_DOWNLOAD TRUE)
FetchContent_MakeAvailable(curl)

add_library(curl_int INTERFACE)
target_link_libraries(curl_int INTERFACE libcurl)
target_include_directories(curl_int INTERFACE ${curl_SOURCE_DIR}/include ${curl_BINARY_DIR}/include/curl)
add_library(CURL::mylibcurl ALIAS curl_int)
set(CURL_INCLUDE_DIR
        ${curl_SOURCE_DIR}/include
        )


# --- CURL C++
FetchContent_Declare(curlpp
        GIT_REPOSITORY  https://github.com/jpbarrette/curlpp.git
        )
FetchContent_MakeAvailable(curlpp) # ----> Error occurs here
cmake_print_variables(curlpp_SOURCE_DIR curlpp_BINARY_DIR)
add_library(curlpp_int INTERFACE)
target_link_libraries(curlpp_int INTERFACE libcurlpp CURL::mylibcurl)
target_include_directories(curlpp_int INTERFACE ${curlpp_SOURCE_DIR}/include ${curlpp_BINARY_DIR}/include/curl)
add_library(CURLPP::mylibcurlpp ALIAS curlpp_int)
set(CURLPP_INCLUDE_DIR
        ${curlpp_SOURCE_DIR}/include
        )
set(CURLPP_LIB_DIR
        ${curlpp_BINARY_DIR})

cmake_print_variables(CURLPP_LIB_DIR)
cmake_print_variables(CURLPP::mylibcurlpp)

# The rest of CMakeLists.txt is omitted

问题原因

curlpp的CMake配置脚本会调用find_package(CURL)查找依赖,但通过FetchContent构建的curl不会自动设置find_package所需的CURL_LIBRARY、CURL_INCLUDE_DIR等变量,也不会默认将自身配置路径加入CMake搜索路径,导致curlpp的配置流程无法找到已构建的curl库。

解决方案

方案一:手动设置curlpp依赖的CURL变量

在执行curlpp构建前,手动设置find_package(CURL)需要的变量,指向已构建的curl:

# --- CURL C++
FetchContent_Declare(curlpp
        GIT_REPOSITORY  https://github.com/jpbarrette/curlpp.git
        )

# 手动设置CURL相关变量,让curlpp的find_package能找到
set(CURL_INCLUDE_DIR "${curl_SOURCE_DIR}/include;${curl_BINARY_DIR}/include/curl" CACHE INTERNAL "")
set(CURL_LIBRARY libcurl CACHE INTERNAL "")
set(CURL_FOUND TRUE CACHE INTERNAL "")

FetchContent_MakeAvailable(curlpp)

方案二:手动控制curlpp构建流程,指定CURL目标(更规范)

curlpp支持通过CURLPP_CURL_TARGET选项直接指定已存在的CURL目标,拆分FetchContent_MakeAvailable流程并插入该选项设置:

# --- CURL C++
FetchContent_Declare(curlpp
        GIT_REPOSITORY  https://github.com/jpbarrette/curlpp.git
        )

# 手动处理curlpp的拉取和构建,避免自动调用find_package失败
FetchContent_GetProperties(curlpp)
if(NOT curlpp_POPULATED)
  FetchContent_Populate(curlpp)
  # 指定curlpp使用已构建的libcurl目标
  set(CURLPP_CURL_TARGET libcurl CACHE INTERNAL "")
  add_subdirectory(${curlpp_SOURCE_DIR} ${curlpp_BINARY_DIR})
endif()

后续链接配置说明

你原本的curlpp_int接口库配置可以保留,它已经正确完成了curlpp与curl的链接,无需额外修改。

内容的提问来源于stack exchange,提问作者shashashamti2008

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:35:27