Install libcurl4-openssl-dev using an external CMake project

I currently have this bit of code in one of my projects:

find_package(CURL REQUIRED) if(${CURL_FOUND}) else(${CURL_FOUND}) message(STATUS "Could not find libcURL. This dependency will be downloaded.") ExternalProject_Add( libcurl GIT_REPOSITORY "git://github.com/bagder/curl.git" GIT_TAG "1b6bc02fb926403f04061721f9159e9887202a96" SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/curl PATCH_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/cURL/buildconf CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/cURL/configure --prefix=<INSTALL_DIR> BUILD_COMMAND ${MAKE} UPDATE_COMMAND "" INSTALL_COMMAND "" LOG_DOWNLOAD ON LOG_UPDATE ON LOG_CONFIGURE ON LOG_BUILD ON LOG_TEST ON LOG_INSTALL ON ) ExternalProject_Get_Property(libcurl source_dir) ExternalProject_Get_Property(libcurl binary_dir) set(CURL_SOURCE_DIR ${source_dir}) set(CURL_BINARY_DIR ${binary_dir}) set(CURL_LIBRARIES ${CURL_BINARY_DIR}/lib/.libs/libcurl.dylib) include_directories(${CURL_SOURCE_DIR}) set(DEPENDENCIES ${DEPENDENCIES} libcurl) endif(${CURL_FOUND}) 

One of the main priorities of the project is to simplify the installation for the end user when compiling from scratch. One error that I encountered with this bit of code is the following error is generated when CMake starts:

 CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE): Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) Call Stack (most recent call first): /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE) /usr/share/cmake-2.8/Modules/FindCURL.cmake:52 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) CMakeLists.txt:29 (find_package) 

This error occurs because libcurl4-openssl-dev not installed on the system where CMake is running. I was wondering how I can set this dependency using CMake. Any suggestions?

+5
source share
1 answer

The REQUIRED argument to find_package means that if the package is not found, CMake will report an error and stop. It looks like you want the curl package not to be present when find_package run, but to load it if necessary.

You probably need something more:

 find_package(CURL) if(NOT ${CURL_FOUND}) message(WARNING "Could not find libcURL. This dependency will be downloaded. To avoid this you can install curl yourself using the standard methods for your platform.") ... endif() 
+2
source

Source: https://habr.com/ru/post/1235490/


All Articles