Импорт websocketpp для cmake в VS2017 - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь импортировать websocket ++ в свой проект в Visual Studio 2017, но у меня много ошибок при его использовании.

Структура проекта:

MyProject
  - src
    - websocketpp
    CMakeLists.txt
    echo_server.cpp

Мой CMakeLists.txt выглядит так:

cmake_minimum_required(VERSION 3.5)
project(MyProject)

include_directories(${PROJECT_SOURCE_DIR}/websocketpp)

add_executable(MyProject echo_server.cpp)

echo_server.cpp выглядит так:

#include "websocketpp/config/asio_no_tls.hpp"

#include "websocketpp/server.hpp"

#include <iostream>

typedef websocketpp::server<websocketpp::config::asio> server;

using websocketpp::lib::placeholders::_1;
using websocketpp::lib::placeholders::_2;
using websocketpp::lib::bind;

// pull out the type of messages sent by our config
typedef server::message_ptr message_ptr;

// Define a callback to handle incoming messages
void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg) {
    std::cout << "on_message called with hdl: " << hdl.lock().get()
              << " and message: " << msg->get_payload()
              << std::endl;

    // check for a special command to instruct the server to stop listening so
    // it can be cleanly exited.
    if (msg->get_payload() == "stop-listening") {
        s->stop_listening();
        return;
    }

    try {
        s->send(hdl, msg->get_payload(), msg->get_opcode());
    } catch (websocketpp::exception const & e) {
        std::cout << "Echo failed because: "
                  << "(" << e.what() << ")" << std::endl;
    }
}

int main() {
    // Create a server endpoint
    server echo_server;

    try {
        // Set logging settings
        echo_server.set_access_channels(websocketpp::log::alevel::all);
        echo_server.clear_access_channels(websocketpp::log::alevel::frame_payload);

        // Initialize Asio
        echo_server.init_asio();

        // Register our message handler
        echo_server.set_message_handler(bind(&on_message,&echo_server,::_1,::_2));

        // Listen on port 9002
        echo_server.listen(9002);

        // Start the server accept loop
        echo_server.start_accept();

        // Start the ASIO io_service run loop
        echo_server.run();
    } catch (websocketpp::exception const & e) {
        std::cout << e.what() << std::endl;
    } catch (...) {
        std::cout << "other exception" << std::endl;
    }
}

Ошибка:

Код серьезности Описание Ошибка состояния подавления строки файла проекта (активный) E1696 не может открыть исходный файл "websocketpp / config / core.hpp" MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ websocketpp \ config \ asio_no_tls.hpp 31
Ошибка (активная) E1696 не может открыть исходный файл "websocketpp / transport / asio / endpoint.hpp" MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ websocketpp \ config \ asio_no_tls.hpp 32
Ошибка (активная) E1696 не может открыть исходный файл "websocketpp / role / server_endpoint.hpp" MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ websocketpp \ server.hpp 31
Ошибка (активная) E0283 квалифицированное имя не допускается MyProject - 64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 7
Ошибка (активная) E0065 ожидал ';' MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 7
Ошибка (активная) Имя E0276, за которым следует '::', должно быть классом или имя пространства имен MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 9
Ошибка (активная) Имя E0276, за которым следует '::', должно быть классом или имя пространства имен MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 10
Ошибка (активная) Имя E0276, за которым следует '::', должно быть классом или имя пространства имен MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 11
Ошибка (активная) Имя E0276, за которым следует '::', должно быть классом или имя пространства имен MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 14
Ошибка (активная) E0070 неполный тип не допускается MyProject - 64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 17
Ошибка (активная) E0020 идентификатор "сервер" не определен MyProject - 64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 17
Ошибка (активная) E0020 идентификатор "s" не определен MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 17
Ошибка (активная) E0018 ожидал ')' MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 17
Ошибка (активная) E0065 ожидал ';' MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 17
Ошибка (активная) E0077 это объявление не имеет класса или типа хранилища спецификатор MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 43
Ошибка (активная) E0065 ожидал ';' MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 43
Ошибка (активная) E0077 это объявление не имеет класса или типа хранилища спецификатор MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 44
Ошибка (активная) E0065 ожидал ';' MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 44
Ошибка (активная) E0077 это объявление не имеет класса или типа хранилища спецификатор MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 47
Ошибка (активная) E0065 ожидал ';' MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 47
Ошибка (активная) E0077 это объявление не имеет класса или типа хранилища спецификатор MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 50
Ошибка (активная) E0065 ожидал ';'MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 50
Ошибка (активная) E0077 это объявление не имеет класса хранения или спецификатора типа MyProject - x64-Debug (по умолчанию) G: _Development\ Projects \ MyProject \ src \ echo_server.cpp 53
Ошибка (активная) E0065 ожидал ';'MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 53
Ошибка (активная) E0077 это объявление не имеет класса хранения или спецификатора типа MyProject - x64-Debug (по умолчанию) G: _Development\ Projects \ MyProject \ src \ echo_server.cpp 56
Ошибка (активная) E0065 ожидал ';'MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 56
Ошибка (активная) E0077 это объявление не имеет класса хранения или спецификатора типа MyProject - x64-Debug (по умолчанию) G: _Development\ Projects \ MyProject \ src \ echo_server.cpp 59
Ошибка (активная) E0065 ожидал ';'MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 59
Ошибка (активная) E0169 ожидала объявления MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src\ echo_server.cpp 60
Ошибка C1083 Не удается открыть включаемый файл: 'websocketpp / config / core.hpp': нет такого файла или каталога C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE\ src \ CMakeLists.txt g: _development \ projects \ myproject \ src \ websocketpp \ config \ asio_no_tls.hpp 31

Что не так?пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 марта 2019

Читать реализацию websocketpp, импортировать ее в ваш проект должно быть довольно просто.

Начните с загрузки websocketpp и установите его:

git clone https://github.com/zaphoyd/websocketpp.git && cd websocketpp
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=some/known/path ..
cmake --build . --target install

Не забудьте .. в команде. Это относительный путь к исходному каталогу из каталога сборки.

some/known/path может быть глобальным путем на вашем компьютере, в каталоге пользователя или даже внутри определенного каталога в вашем проекте.

Кроме того, поскольку эта библиотека экспортирует пакет в реестр пакетов пользователя, вы можете пропустить установку и позволить cmake импортировать дерево сборки как сам пакет. Однако обычно я считаю, что их установка чище.

cmake --build .

Тогда внутри вашего проекта:

cmake_minimum_required(VERSION 3.5)
project(MyProject)

find_package(websocketpp REQUIRED)

add_executable(MyProject echo_server.cpp)

# Link include directories, libraries, defines etc.
target_link_libraries(MyProject PUBLIC websocketpp::websocketpp)

Затем вы можете вызвать cmake следующим образом:

# inside your-project/build
cmake -DCMAKE_PREFIX_PATH=some/known/path ..
...