cmake Простой подход без пакетов


пример

Пример, который создает исполняемый файл (редактор) и связывает библиотеку (выделение) с ней. Структура проекта проста, для этого требуется мастер CMakeLists и каталог для каждого подпроекта:

CMakeLists.txt
editor/
    CMakeLists.txt
    src/
        editor.cpp
highlight/
    CMakeLists.txt
    include/
        highlight.h
    src/
        highlight.cpp

Мастер CMakeLists.txt содержит глобальные определения и вызов add_subdirectory для каждого подпроекта:

cmake_minimum_required(VERSION 3.0)
project(Example)

add_subdirectory(highlight)
add_subdirectory(editor)

CMakeLists.txt для библиотеки назначает источники и включает в себя каталоги. Используя target_include_directories() вместо include_directories() target_include_directories() dirs будут распространяться на пользователей библиотеки:

cmake_minimum_required(VERSION 3.0)
project(highlight)

add_library(${PROJECT_NAME} src/highlight.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC include)

CMakeLists.txt для приложения назначает источники и связывает выделенную библиотеку. Пути к бинарнику и включают в себя автоматическое управление cmake:

cmake_minimum_required(VERSION 3.0)
project(editor)

add_executable(${PROJECT_NAME} src/editor.cpp)
target_link_libraries(${PROJECT_NAME} PUBLIC highlight)