CMake работает нормально, но сборка не работает для сторонней библиотеки
Мне нужно использовать OpenSSL и cpprestsdk в проекте C++, над которым я работаю, но у меня возникают проблемы с его правильной сборкой. В моем CMakeLists.txt у меня есть:
cmake_minimum_required(VERSION 3.12)
project(Final_Project)
set(CMAKE_CXX_STANDARD 11)
set(OPENSSL_INCLUDE_DIR /usr/local/opt/openssl/bin/openssl)
find_package(cpprestsdk REQUIRED NAMES cpprestsdk cpprest )
find_package(OpenSSL REQUIRED)
add_executable(Final_Project main.cpp)
Который строит просто отлично и не возвращает ошибок. Весь мой код на данный момент содержится в main.cpp.
В main.cpp у меня есть:
#include <iostream>
#include <string>
#include <cpprest/http_client.h>
#include <cpprest/filestream.h>
using namespace std;
int main(int argc, char* argv[])
{
cout << "Running!" << endl;
return 0;
}
Но всякий раз, когда я пытаюсь собрать / запустить его, я получаю сообщение об ошибке cpprest:
Scanning dependencies of target Final_Project
[ 50%] Building CXX object CMakeFiles/Final_Project.dir/main.cpp.o
/Users/myAccount/myFolder/Final Project/main.cpp:3:10: fatal error: 'cpprest/http_client.h' file not found
#include <cpprest/http_client.h>
^~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/Final_Project.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Final_Project.dir/all] Error 2
make: *** [all] Error 2
Я установил OpenSSL и cpprestsdk вместе с homebrew, и я добавил все, что мне нужно, в мои PATH. Я попытался добавить аргументы командной строки в GCC, чтобы включить путь cpprestsdk, и я попытался переименовать #include <cpprest...> to #include <cpprestsdk...>
но безрезультатно. У кого-нибудь есть идеи? Я уверен, что я просто скучаю по чему-то простому.
1 ответ
В итоге я понял, что в имени моего проекта есть пробел, поэтому я реорганизовал его без этого и соответственно обновил свой CMake. Я также должен был добавить target_link_libraries ниже строки add_executable. Пример моих рабочих CMakeLists ниже:
cmake_minimum_required(VERSION 3.12)
project(FinalProject)
set(CMAKE_CXX_STANDARD 11)
# Set OpenSSL dir, this *should* be default on linux/mac
set(OPENSSL_INCLUDE_DIR /usr/local/opt/openssl/bin/openssl)
# Get OpenSSL
find_package(OpenSSL REQUIRED)
# Get cppRestSDK
find_package(cpprestsdk REQUIRED)
# Compile + Link
add_executable(FinalProject main.cpp)
target_link_libraries(FinalProject PRIVATE cpprestsdk::cpprest)