Инструкция тестировалась на Conan, установленном через pip install conan==1.52.0. Версия 1.51 не работала.
Подробности см. в уроке Ещё раз о conan — линкуем с умом.
При сборке под Linux обязательно указываются флаги:
-s compiler.libcxx=libstdc++11-s build_type=???
Вот пример конфигурирования для Release и Debug:
mkdir -p build-release
cd build-release
conan install .. --build=missing -s build_type=Release -s compiler.libcxx=libstdc++11
cmake .. -DCMAKE_BUILD_TYPE=Release
cd ..
mkdir -p build-debug
cd build-debug
conan install .. --build=missing -s build_type=Debug -s compiler.libcxx=libstdc++11
cmake .. -DCMAKE_BUILD_TYPE=Debug
cd ..
Нужно выполнить два шага:
- В conanfile.txt нужно изменить
cmakeнаcmake_multi. После этого можно конфигурировать таким способом: - В CMakeLists.txt заменить
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)наinclude(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake).
После этого можно запустить подобный снипет:
mkdir build
cd build
conan install .. --build=missing -s build_type=Debug
conan install .. --build=missing -s build_type=Release
conan install .. --build=missing -s build_type=RelWithDebInfo
conan install .. --build=missing -s build_type=MinSizeRel
cmake ..
#or
conan install .. --build=missing -s build_type=Debug && cmake .. -DCMAKE_BUILD_TYPE=Debug && cmake --build .
Последовательность заработала на винде
mkdir build_debug && cd build_debug
conan install .. --build=missing -s build_type=Debug
cmake ..
cmake --build .
В таком случае будут собираться все конфигурации (что не быстро). Можно сэкономить время, оставив только нужные.
Запускать сборку нужно только через родной cmd. В других консолях иногда возникают проблемы.
Можно собирать и запускать сервер одной командой (вернее, двумя) в докере. Делается это так:
docker build -t my_http_server .
docker run --rm -p 80:8080 my_http_server
docker run --rm -p 80:8080 --network=host leave_game
Это каноничный способ запуска, которым будут пользоваться студенты. Если он не работает, значит, мы что-то не так делаем.
Из докерфайла можно узнать все детали сборки запуска, если что-то идёт не так локально.
В папке build выполнить команду
bin/game_server ../data/config.json ../static/После этого можно открыть в браузере:
- http://127.0.0.1:8080/api/v1/maps для получения списка карт и
- http://127.0.0.1:8080/api/v1/map/map1 для получения подробной информации о карте
map1 - http://127.0.0.1:8080/ для чтения статического контента (в каталоге static)