Skip to content

Files

96 lines (65 loc) · 6.92 KB

cmake.md

File metadata and controls

96 lines (65 loc) · 6.92 KB

Из чего состоит CMakeLists.txt

Создание файла "CMakeLists.txt" начинается с определения требований к версии CMake:

cmake_minimum_required(VERSION 3.22 FATAL_ERROR)

Указание корректной версии CMake может быть критичным, т.к. добавляется поддержка новых языков программирования и директив (так, например, в 3.26 появилась поддержка Microsoft ASM), появляются новые команды и переменные окружения. Чем сложнее скрипт сборки тем более чувствительным он является к версии CMake.

Указать имя проекта и используемый для его сборки язык программирования можно директивой project:

project(dsliportable LANGUAGES CXX)

Настройка ключей компиляции осуществляется директивами set:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Выбор стандарта C++ может быть важной задачей. Если выбрать C++ 11, то можно использовать специализированные компиляторы, надёжно работающие на устаревающих платформах. Однако, актуальные стандарты C++ предоставляют мощные инструментальные возможности, например, в C++ 17 появилась поддержка типов: std::string_view, std::optional, std::variant.

Указываем список файлов, участвующих в сборке проекта можно используя директиву add_executable:

add_executable(${PROJECT_NAME} 
    main.cpp 
    CommportBoost.h
    CommportBoost.cpp)

Альтернативы CMake

В качестве альтернативы CMake рассматривается проект Google под названием Bazel. Для установки инструмента может потребоваться система установки под названием Bazelisk. Инструмент может быть использован в разных операционных системах и для разных языков программирования (из технологического стека Google): C++, Go, Java. Одна из главных feature Bazel - интеграция в другими системами сборки, включая CMake. Цель - для генерации скрипта сборки проекта использовать скрипты от CMake, если отсутствует готовый скрипт для Bazel.

Новичок среди систем сборки - Meson

Подключение библиотек Boost

Подключение библиотеки Boost не всегда является тривиальной задачей. CMake определяет местонахождение библиотек Boost в разных операционных системах, но это происходит только в том случае, если Boost размещён в "стандарных подкаталогах", т.е. был установлен через app-get, или собран из исходников проекта с указанием на необходимость инсталляции библиотек.

Однако, при выполнении "стандартной установки" библиотеки Boost в Microsoft Windows, командой b2 install, CMake всё равно не может найти необходимые файлы Boost. Также существует проблема сборки приложений, использующих разные версии Boost на одной машине. В обоих случаях, в файле "CMakeLists.txt" требуется внести директивы, подсказывающие, где размещены файлы библиотеки.

Исходя из опыта, для сборки в Windows почти всегда нужно явным образом указывать размещение файлов Boost:

if (WIN32)
    set( BOOST_ROOT c:/boost/ )
    set( BOOST_INCLUDEDIR c:/boost/include/boost-1_76/ )
    set( BOOST_LIBRARYDIR c:/boost/lib )    
endif (WIN32)

Для Linux, почти никогда не нужно подсказывать местоположение Boost, хотя иногда это и бывает необходимым:

if (Unix)
    set( BOOST_ROOT $ENV{HOME}/boost/current/ )
    set( BOOST_INCLUDEDIR $ENV{HOME}/boost/current/include/ )
    set( BOOST_LIBRARYDIR $ENV{HOME}/boost/current/lib_x86_64/ )
endif (WIN32)

Настройка параметров сборки приложения с использованием Boost осуществляется командной find_package():

find_package(Boost 1.74 REQUIRED COMPONENTS system)

После ключевого слова COMPONENTS перечисляются необходимые в проекте библиотеки, например:

find_package(Boost 1.74 REQUIRED COMPONENTS system locale filesystem thread)

Если библиотеки будут найдены, то CMake создаст переменную Boost_LIBRARIES, которую можно будет использовать, например, в команде target_link_libraries, которая включает в генерируемый проект ссылки на линкуемые библиотеки:

target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})

Также следует включить в "CMakeLists.txt" инструкцию, включающую ссылку на папку с заголовочными файлами Boost в проект сборки:

target_include_directories( ${PROJECT_NAME} PUBLIC ${Boost_INCLUDE_DIRS})

Использование plug-ins CMake для Visual Studio Code

Наиболее популярные plug-ins разработаны Microsoft (CMake Tools), twxs и Jose Torres и содержат инструменты IntelliSense для написания скриптов сборки CMakeLists.txt.

Одна из наиболее полезных функций - выбор Kit-а для сборки исходников. Сделать это можно средствами CMake Tools, через "Command Palette..." и команду "CMake: Select a Kit".