Я пытаюсь использовать библиотеку sdbus-cpp . Чтобы использовать в документации сказано, вам необходимо использовать find_package()
. Я понимаю, что эта команда ищет sdbus-c++
в системе пользователя.
Однако я хочу, чтобы эта библиотека была построена вместе с моим собственным исходным кодом. Таким образом, возникает вопрос: как мне удовлетворить find_package()
внутри моего собственного CMakeLists.txt?
Автор библиотеки предоставляет инструкции о том, как собрать и установить библиотеку, но я не использую свою собственную библиотеку, чтобы меня заставляли вводить дополнительные команды в терминале. Думаю, мне нужно добавить файл Find*.txt
или команду install()
, но я не смог заставить их работать...
Для этого вы можете использовать FetchContent. Например:
cmake_minimum_required(VERSION 3.15)
project(TestSdbus)
include(FetchContent)
FetchContent_Declare(sdbus
GIT_REPOSITORY https://github.com/Kistler-Group/sdbus-cpp.git
GIT_TAG master
)
option(BUILD_SHARED_LIBS "" ON)
option(BUILD_EXAMPLES "" OFF)
FetchContent_MakeAvailable(sdbus)
set(CMAKE_CXX_STANDARD 17)
set(SOURCES main.cpp)
add_executable(test_sdbus ${SOURCES})
target_link_libraries(test_sdbus sdbus-c++)
Обратите внимание, что эта библиотека имеет внешнюю зависимость от системных пакетов pkj-config и libsystemd-dev.
Как предположил Роман в своем ответе,
find_package
, вероятно, не то, что вам нужно в вашем случае, поскольку вы хотите создать проект с собственным исходным кодом (не раньше). Я бы загрузил проект, который вы хотите создать, вместе с вашим собственным исходным кодом и использовалFetchContent
, чтобы получить и включить его. Альтернативно вы можете просто скопировать проект в основной каталог проекта и включить верхний уровеньCMakeLists.txt
в свой основной проект.