Добавление CURL в cmake проект | VS19 | Windows

167
25 марта 2022, 17:50

Имею следующий код в CMakeLists.txt

cmake_minimum_required (VERSION 3.8)
project ("Halberd")
set(CURL_PATH "E:\\CPP_LIBS\\curl\\Release")

find_library(
    LIB_CURL
    NAMES
        curl
    PATHS 
        ${CURL_PATH}/lib
        ${CURL_PATH}/include
        )
add_executable(
    API
    ${CMAKE_CURRENT_SOURCE_DIR}/Halberd/source/API/API.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/Halberd/source/API/API.h
    )

target_link_libraries(API ${LIB_CURL})

По пути CURL_PATH находится собранная под винду библиотека Curl. Получаю ошибку:

Не понимаю что не так.

Answer 1

Вам надо использовать модуль CMake под названием - find_package ссылка - https://cmake.org/cmake/help/v3.0/command/find_package.html

пример :

find_package(package_name)

Эта утилита ищет библиотеку и возвращает уже готовые переменные для линковки.

Если библиотека найдена, то будут добавленные переменные типа *_ENABLE по которой Вы сможете определить, что библиотека найдена.

А вообще правила FindXXXX.cmake очень гибкие - Вы можете написать даже свое (если вы поставили библиотеку по кастомному пути)

Вот пример как найти curl

set(CURL_LIBRARY "-lcurl") 
find_package(CURL REQUIRED) 
add_executable (test test.cpp)
if(LIBCURL_ENABLE)
    include_directories(${CURL_INCLUDE_DIR})
    target_link_libraries(test  ${CURL_LIBRARIES})
endif()

т.к. у Вас скорее всего win32 судя по вопросу, стоит добавить еще такой ключик перед началом поиска в find_package

if(WIN32)
    add_definitions("-DCURL_STATICLIB")
endif()

Если Вам интересно посмотреть на сам модуль поиска curl - то вот он на github - https://github.com/Kitware/CMake/blob/master/Modules/FindCURL.cmake

READ ALSO
Настрока компилятора в Qt

Настрока компилятора в Qt

Всем добрый деньСледующая

93
Инициализация структуры С и в С++

Инициализация структуры С и в С++

Есть структура вида

179
Считывание нажатия на клавиатуру

Считывание нажатия на клавиатуру

Как можно считать нажатие клавиши за одно, а не в стандартной форме: сигнал - пауза - сигнал (пока происходит нажатие)?

130
Хранение абстрактного типа в stl::vector C++ [дубликат]

Хранение абстрактного типа в stl::vector C++ [дубликат]

Пытаюсь хранить в контейнере абстрактный тип "Weapon", но возникает ошибкаКод:

106