Импорт websocketpp для cmake в VS2017

Я пытаюсь импортировать 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;
    }
}

Ошибки:

Что случилось? пожалуйста помоги.

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


person Pahan    schedule 11.03.2019    source источник


Ответы (1)


Начните с загрузки 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 следующим образом:

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)

Спасибо за ваш ответ, но у меня есть ошибка: G: _Development \ Projects \ CPP_Sources \ websocketpp \ build ›cmake -DCMAKE_INSTALL_PREFIX = G: / _ Development / Projects / MyProject Ошибка CMake: исходный каталог G: / _ Development / Projects / CPP_Sources / websocketpp / build не содержит CMakeLists.txt. Укажите --help для использования или нажмите кнопку справки в графическом интерфейсе CMake.

# inside your-project/build
cmake -DCMAKE_PREFIX_PATH=some/known/path ..
person Guillaume Racicot    schedule 11.03.2019
comment
Вы забыли _1_ в команде. В нем указывается относительный путь от каталога сборки до источника - person Pahan; 11.03.2019
comment
Сейчас собран хорошо, но пакет не найден. Ошибка CMake CMakeLists.txt (find_package): не предоставив Findwebsocketpp.cmake в CMAKE_MODULE_PATH, этот проект попросил CMake найти файл конфигурации пакета, предоставленный websocketpp, но CMake его не нашла. Не удалось найти файл конфигурации пакета, предоставленный websocketpp, с любым из следующих имен: websocketppConfig.cmake websocketpp-config.cmake - person Guillaume Racicot; 11.03.2019
comment
Хм ... Я здесь удивлен. Библиотека экспортирует пакет правильно, и если вы также установите такой же путь префикса, он должен работать - person Pahan; 11.03.2019
comment
Я добавил этот каталог в путь к переменной env в Windows, и теперь он работает. Большое спасибо! - person Guillaume Racicot; 11.03.2019
comment
Код серьезности Описание Ошибка состояния подавления строки файла проекта (активно) 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 / roles / server_endpoint.hpp" MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ websocketpp \ server.hpp 31
Ошибка (активный) E0283 квалифицированное имя не допускается MyProject - x64-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 - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 17
Ошибка (активный) идентификатор E0020 "сервер" не определен MyProject - x64-Debug (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 17
Ошибка (активный) Идентификатор «s» E0020 не определен MyProject - x64- Отладка (по умолчанию) G: _Development \ Projects \ MyProject \ src \ echo_server.cpp 17
Ошибка (активная) Ожидается E0018 a ')' 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: \ Progr - person Pahan; 11.03.2019