2015-11-08 12 views
5

Attualmente ho questo pezzo di codice in uno dei miei progetti:Installare libcurl4-openssl-dev utilizzando Project esterno di CMake

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}) 

Una delle principali priorità del progetto è quello di essere il più semplice possibile da installare per un utente finale mentre si sta ancora compilando da zero. Un errore che sto funzionando in con questo pezzo di codice è il seguente errore viene generato durante l'esecuzione CMake:

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) 

Questo errore si verifica perché libcurl4-openssl-dev non è installato sul sistema su cui è in esecuzione CMake. Mi stavo chiedendo come potrei andare a installare questa dipendenza usando CMake. Eventuali suggerimenti?

risposta

2

L'argomento REQUIRED a find_package significa che se il pacchetto non viene trovato CMake segnalerà un errore e si fermerà. Sembra che ciò che si desidera sia consentire al pacchetto di arricciatura di non essere presente quando si esegue find_package, ma per scaricarlo se necessario.

probabilmente si desidera qualcosa di più simile a:

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()