00. CMake — базовые сведения

Базовые сведения о CMake CMake является своего рода надстройской над системами сборки, которая позволяет создать кросс платформенное ПО Т.е. мы описываем как собрать проект на «языке» CMake и далее при попытке собрать на Windows/Linux/… он преобразует эти инструкции в понятные для данной платформы и операционной системы (например в Make для Linux) Важной особенностью в CMake […]

Build CMake without tests in command line

Сборка с использованием CMake и блокировкой отдельных частей кода при использовании командной строки Иногда при разработке ПО нет необходимости в сборке тестов и прочих подпрограмм в момент когда ПО отлаживается Ранее я комментировал эти фрагменты в CMakeLists.txt и зачастую забывал раскомментировать, сейчас продумал такой способ: CMakeLists.txt: if(Without_tests) message(«tests build off») else()#»» or FALSE => use […]

Расширенный CMakeLists

Расширенный 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} ) Поиск/добавление путей к […]

06. CMakeCache variables через терминал

Задание переменных CMakeCache через терминал Задание переменных в кеше через терминал cmake .. -D varName:type=value или cmake .. -DvarName:type=value пример cmake .. -D varBool:BOOL=ON cmake .. -D varFilePath:FILEPATH=/home/file.txt Типы переменных (type): BOOL                         ON/OFF or TRUE/FALSE or 1/0 FILEPATH              […]

05. CMakeCache variables

Кешированные переменные CMakeCache Обычные переменные пересоздаются каждый раз при запуске cmake есть возможность хранить и использовать переменные из файла CmakeCache.txt этот файл создается однажды и может быть удален только вручную (система сборки его не уничтожает) Присвоить/Изменить значение кешированной переменной set(varName value CACHE type “What is it” [FORCE]) “What is it” – строка описание (документация) FORCE […]

04. Переменные CMakeList

Переменные CMakeList Задать переменную: set(varName stringValue) Cmake все переменные воспринимает как строки необъявленная переменная равна пустой строке «» если переменная имеет пробелы – они заменяются на ; Задать переменную пример: set(varName stringValue 123) # varName= “stringValue;123” Получить значение переменной: ${varName} message(${varName}) #выводим значение переменной Можно задавать новые переменные используя содерживое другой переменной: set(varName stringValue) # […]

08. Привязка библиотеки к цели — target_link_libraries

Таргетированная линковка (привязка библиотеки к цели) Привязка библиотеки как составной части какой-то цели, выстраивается зависимость только этой цели от этой библиотеки В чем-то похоже на наследование в языке C++ только вместо классов пересобираются библиотеки и модификаторы доступа тоже в чем-то похожи. target_link_libraries(lib_or_app PRIVATE/PUBLIC/INTERFACE libs_or_crc) App<-libA<-libB PRIVATE – библиотека является составной частью этого кода и выше […]

07. Добавление библиотек CMake

Добавление библиотек CMake add_library(libName STATIC/SHARED/MODULE/EXCLUDE_FROM_ALL src.cpp) #сборка статических библиотек add_library(libName STATIC src.cpp) #сборка динамических библиотек add_library(libName SHARED src.cpp) #сборка модулей (динамические библиотеки линкующиеся во время запуска) add_library(libName MODULE src.cpp) EXCLUDE_FROM_ALL – исключает этот таргет/библиотеку из цели ALL Можно указывать тип библиотеки STATIC/SHARED при запуске Cmake: -чтобы получить STATIC библиотеку: ничего не указывать или cmake -DBUILD_STATIC_LIBS=YES […]

03. Минимальный CMakeLists.txt

Минимальный CMakeLists.txt Минимальный файл CMakeLists.txt содержит всего 3 строки cmake_minimum_required(VERSION 3.0.0) project(App123) add_executable(myApp main.cpp) Разберем подробнее что делается в каждой из строк >>Минимальная версия cmake cmake_minimum_required(VERSION 3.2)#минимальная версия cmake — иначе выдаст ошибку т.к. версии имеют разлизия и в новых версиях появляются фичи. данная строка указывает какой версией cmake собирать проект >> Имя проекта project(Prj_Name)#имя […]