Расширенный CMakeLists
Ниже представлены «расширения» для файла CMakeLists благодаря которым становится возможным собирать большие проекты
Установка стандарта языка С++:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
//——————————————————
//Добавление и работа с библиотеками
//——————————————————
Поиск требуемых библиотек
find_package(libName REQUIRED)
find_library(libName2
NAMES libName2.a libName2
PATHS "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}"
)
Поиск/добавление путей к файлам:
find_path(SYSTEMD_INCLUDE_DIRS
NAMES systemd/sd-bus.h
PATHS ${SYSTEMD_PKGCONF_INCLUDE_DIRS}
)
Поиск/добавление путей к библиотекам:
find_library(SYSTEMD_LIBRARIES
NAMES systemd
PATHS ${SYSTEMD_PKGCONF_LIBRARY_DIRS}
)
//——————————————————
//Добавление и работа с файлами и папками
//——————————————————
Добавление папок (где есть файлы проекта в том числе .h)
include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/folder
)
Поиск исходных файлов по папкам
file(GLOB_RECURSE SRC_FILES
${PROJECT_SOURCE_DIR}/main.cpp
${PROJECT_SOURCE_DIR}/folder_src/*.cpp
)
Добавление требуемых документов:
# Related files definition
file(GLOB_RECURSE RELATED_FILES
"README.md"
)
Добавление файлов в проект
add_executable(${PROJECT_NAME}
${SRC_FILES}
${RELATED_FILES}
)
//——————————————————
//»Массовая» линковка библиотек
//——————————————————
«Массовая» линковка библиотек
SET(PROJECT_LIBRARIES
${varLibName}
extLib
)
target_link_libraries(${PROJECT_NAME} ${PROJECT_LIBRARIES})
//——————————————————
//Добавление поддиректорий
//——————————————————
add_subdirectory(tests)
В этом случае при сборке cmake зайдет в поддиректорию test и будет выполнять сборку согласно локальному CMakeList.txt если его найдет