Я пытаюсь написать веб-сервис на 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 "git@github.com: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 ++ что-то похожее на груз Руста или, возможно, на стек Хаскелла?