FindCURL¶
Finds the native curl installation (include directories and libraries) for transferring data with URLS.
Added in version 3.17: If curl is built using its CMake-based build system, it will provide its own
CMake Package Configuration file (CURLConfig.cmake
) for use with the
find_package()
command in config mode. By default, this module
searches for this file and, if found, returns the results without further
action. If the upstream configuration file is not found, this module falls
back to module mode and searches standard locations.
Added in version 3.13: Debug and Release library variants are found separately.
Components¶
Added in version 3.14.
This module supports optional components to detect the protocols and features available in the installed curl (these can vary based on the curl version):
Protocols: DICT FILE FTP FTPS GOPHER GOPHERS HTTP HTTPS IMAP IMAPS IPFS IPNS
LDAP LDAPS MQTT POP3 POP3S RTMP RTMPS RTSP SCP SFTP SMB SMBS SMTP
SMTPS TELNET TFTP WS WSS
Features: alt-svc asyn-rr AsynchDNS brotli CAcert Debug ECH gsasl GSS-API
HSTS HTTP2 HTTP3 HTTPS-proxy HTTPSRR IDN IPv6 Kerberos Largefile
libz MultiSSL NTLM NTLM_WB PSL SPNEGO SSL SSLS-EXPORT SSPI
threadsafe TLS-SRP TrackMemory Unicode UnixSockets zstd
Components can be specified with the find_package()
command as required
for curl to be considered found:
find_package(CURL [COMPONENTS <protocols>... <features>...])
Or to check for them optionally, allowing conditional handling in the code:
find_package(CURL [OPTIONAL_COMPONENTS <protocols>... <features>...])
Refer to the curl documentation for more information on supported protocols and features. Component names are case-sensitive and follow the upstream curl naming conventions.
Imported Targets¶
This module provides the following Imported Targets:
CURL::libcurl
Added in version 3.12.
Target encapsulating the curl usage requirements, available if curl is found.
Result Variables¶
This module defines the following variables:
CURL_FOUND
Boolean indicating whether the (requested version of) curl and all required components are found.
CURL_VERSION
Added in version 4.0.
The version of curl found. This supersedes
CURL_VERSION_STRING
.CURL_<component>_FOUND
Added in version 3.14.
Boolean indicating whether the specified component (curl protocol or feature) is found.
CURL_INCLUDE_DIRS
Include directories containing the
curl/curl.h
and other headers needed to use curl.Note
When curl is found via config mode, this variable is available only with curl version 8.9 or newer.
CURL_LIBRARIES
List of libraries needed to link against to use curl.
Note
When curl is found via module mode, this is a list of library file paths. In config mode, this variable is available only with curl version 8.9 or newer and contains a list of imported targets.
Hints¶
This module accepts the following variables:
CURL_NO_CURL_CMAKE
Added in version 3.17.
Set this variable to
TRUE
to disable searching for curl via config mode.CURL_USE_STATIC_LIBS
Added in version 3.28.
Set this variable to
TRUE
to use static libraries. This is meaningful only when curl is not found via config mode.
Deprecated Variables¶
The following variables are provided for backward compatibility:
CURL_VERSION_STRING
Deprecated since version 4.0: Superseded by
CURL_VERSION
.The version of curl found.
Examples¶
Finding the curl library and specifying the required minimum version:
find_package(CURL 7.61.0)
Finding the curl library and linking it to a project target:
find_package(CURL)
target_link_libraries(project_target PRIVATE CURL::libcurl)
Using components to check if the found curl supports specific protocols or features:
find_package(CURL OPTIONAL_COMPONENTS HTTPS SSL)
if(CURL_HTTPS_FOUND)
# curl supports the HTTPS protocol
endif()
if(CURL_SSL_FOUND)
# curl has SSL feature enabled
endif()