【问题标题】:CMake running fine but build not working for 3rd party libraryCMake 运行良好,但构建不适用于 3rd 方库
【发布时间】:2018-12-06 04:46:50
【问题描述】:

我需要在我正在处理的 C++ 项目中使用 OpenSSL 和 cpprestsdk,但在正确构建它时遇到了问题。在我的 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

我用 homebrew 安装了 OpenSSL 和 cpprestsdk 就好了,我已经将我认为我需要的所有东西都添加到了我的 PATH 中。我尝试向 GCC 添加命令行参数以包含 cpprestsdk 路径,并且尝试重命名 #include &lt;cpprest...&gt; to #include &lt;cpprestsdk...&gt; 但无济于事。有人有想法么?我确定这只是我缺少的一些简单的东西。

【问题讨论】:

  • 我已经尝试将命令行参数添加到 GCC 以包含 cpprestsdk 路径 -- 您应该准确说明您尝试过的内容,而不仅仅是说明您尝试过不同的东西.错误很明显,编译器无法解析cpprest/http_client.h。也许您指定的路径不正确?
  • @PaulMcKenzie 我尝试了“-I /usr/local/opt/cpprestsdk/”和“-I /usr/local/opt/cpprestsdk/lib/cpprestsdk”以及它们之间的许多组合。第一个路径是指向 /usr/local/Cellar/cpprestsdk/2.10.8 的符号链接
  • 您好,您可以尝试打印变量来检查路径是否正确:message(STATUS "cpprestsdk include dir: ${cpprestsdk_INCLUDE_DIRS}")

标签: c++ gcc cmake dependencies cpprest-sdk


【解决方案1】:

我最终弄清楚了,我的项目名称中有一个空格,所以我在没有它的情况下对其进行了重构,并相应地更新了我的 CMake。我还必须在 add_executable 行下方添加 target_link_libraries。下面是我的工作 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)

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多