使用CMake的External Project安装libcurl4-openssl-dev

6

目前在我的一个项目中,我有这段代码:

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

该项目的主要优先事项之一是尽可能方便最终用户安装,同时仍然从头开始编译。但在运行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)

这个错误是因为在运行CMake的系统上没有安装libcurl4-openssl-dev。我想知道如何使用CMake安装这个依赖项。有什么建议吗?
1个回答

2
find_package中的REQUIRED参数意味着如果找不到该软件包,CMake将报告错误并停止。看起来您希望在运行find_package时允许curl软件包不存在,但如果需要,可以下载它。
您可能需要使用以下内容:
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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接