Я пытаюсь написать веб-сервис на C ++ (я очень плохо знаком с языком), используя restbed для обработки HTTP. Оба проекта, похоже, используют cmake для настройки конфигурации и управления зависимостями, поэтому я решил, что и я тоже так сделаю. Но я не совсем понимаю, как это сделать.
Вот мой минимальный CMakeLists.txt
cmake_minimum_required(VERSION 3.7)
project(WebService)
set (WebService_VERSION_MAJOR 1)
set (WebService_VERSION_MAJOR 0)
set(CMAKE_CXX_STANDARD 11)
add_executable(${PROJECT_NAME} main.cpp)
Я понимаю, что есть несколько способов добавить зависимости в cmake. Я пытался сделать что-то вроде find_package (restbed), но, очевидно, он не знает, где найти нужный мне пакет, и продолжает просить дополнительные файлы cmake, чтобы помочь ему. Я не уверен, где я должен их найти. Я должен написать один сам?
Я попытался с помощью директивы ExternalProject_Add. Я добавил следующее.
ExternalProject_Add(
restbed
GIT_REPOSITORY "[email protected]:Corvusoft/restbed.git"SOURCE_DIR "${CMAKE_SOURCE_DIR}/deps/restbed"CMAKE_ARGS -DBUILD_SSL=OFF
)
set (restbed_INCLUDE ${CMAKE_SOURCE_DIR}/deps/restbed/distribution/include/)
set (restbed_LIB ${CMAKE_SOURCE_DIR}/deps/restbed/distribution/library/librestbed.a)
add_dependencies(${PROJECT_NAME} restbed)
include_directories(${restbed_INCLUDE})
target_link_libraries(${PROJECT_NAME} ${restbed_LIB})
Проблема, с которой я столкнулся, заключается в том, что все шаги по настройке внешнего проекта выполняются во время сборки, а не во время конфигурации cmake. Это означает, что каждый внешний проект перестраивает и переустанавливает все при каждом запуске make
, Мой сервис маленький, и это кажется очень расточительным.
Есть ли лучший способ борьбы с зависимостями? Есть ли более простой инструмент, чем cmake? Есть ли что-то для C ++, похожее на груз Руста или, возможно, на стек Хаскелла?
Задача ещё не решена.
Других решений пока нет …