Quick CMake tutorial
Ця література буде керувати вашим процесом створення і розробка простий CMake проект в CLion. Step by step, you will learn the basics of CMake as build system, along with CMake-specific IDE settings and actions.
Source code of sample project shown below available on GitHub.
1. Simple CMake project
CMake є системою meta build, що використовує scripts, що називаються CMakeLists для створення будівельних файлів для конкретного середовища (для прикладу, makefiles на Unix machines).
Якщо ви створили новий проект CMake в CLion, файл CMakeLists.txt генерується автоматично під проектом проекту.
Start a sample CMake project
- Select File | Новий проект від основного меню.
- Select C++ Executable on left-hand pane. У нашому прикладі, проект name is cmake_testapp and the selected language standard in C++17. Click Create.
- CLion буде створювати простий проект з одним джерелом файлу main.cpp і CMakeLists.txt script під the root. Автоматично генеровані CMakeLists.txt містять наступні команди:
| Command | Description |
|---|---|
| cmake_minimum_required(VERSION 3.26) | Відповідь на мінімальну потрібну версію CMake, як набір в дефектні інструменти. Для більшості випадків, якщо CMake executable не була змінена надійно, це є bundled CMake version. |
| project(cmake_testapp) | Defines the project name according to what we provided during project creation. |
| set(CMAKE_CXX_STANDARD 17) | Sets the CMAKE_CXX_STANDARD variable to the value of 17, as we selected when creating the project. |
| add_executable(cmake_testapp main.cpp) | Adds the cmake_testapp executable target to be built from main.cpp . We'll get intargets further below. |
2. CMake targets and CLion configurations
Target is executable або library to built using a CMake script. Ви можете подумати про те, що багато повідомлень вибираються в одному script.
Для цього, наш тест-проект має тільки одну будову target, cmake_testapp . Натиснувши на першу версію проекту, CLion автоматично прибирає run/debug configuration associated with this target:
У браузері, натисніть Edit Configurations to view the details. target name і executable name є той самий, як specified in CMakeLists.txt :
Notice the Before launch area of this dialog. Build is set as before launch step by default. Якщо ми можемо скористатися цією настройкою, то не тільки для того, щоб повторити або скористатися нашим target, але також для виконання будови. Для більш докладної інформації про різні побудови рішень, доступні в CLion, виконати Build actions.
3. Adding files to existing targets
Let's create a new source file general.cpp і пристосується до cmake_testapp target.
- Right-click root folder в Project tree and select New | C/C++ Source File :
- Set the Add to targets checkbox:
- Клацніть OK , і новий файл буде added to the add_executable command: Якщо ви придбали файл до target this way, без manually editing CMakeLists.txt script, CLion reloads the project automatically in the background.
4. Adding new targets
Нові роки's add 2 more files and create an executable and a library target for them.
New executable target
- Right-click root folder в Project tree and select New | C/C++ Source File again.
- Set the file name (calc in our example).
- У пункті Add targets, clear the cmake_testapp checkbox.
- Click the Add new target link:
- Specify the target name ( cmake_testapp_calc ) and click Add :
- New created target will appear in the list. Make sure that only the cmake_testapp_calc target is selected: Click OK .
- CLion буде add a new add_executable command to CMakeLists.txt and reload the project:
- Після повторного налаштування, у новому налаштуванні буде appear in the configuration switcher:
Це is example to illustrate how to add a new executable target. Зауважте, що якщо ви збираєтеся ця функція, ви повинні додати int main() функцію calc.cpp .
New library target
- Right-click root folder в Project tree and select New | C/C++ Source File again.
- Використовуйте file name ( calc_lib ).
- Виберіть checkboxes в Додати до списку поля.
- Click Add new target .
- У списку загоряння, виберіть add_library : У цьому списку згори, ви можете керувати командами для збільшення CUDA і Qt targets.
- Set the target name ( cmake_testapp_lib ) and click Add .
- New created target will appear in the list. Make sure that other targets' checkboxes є cleared. Set the Create an associated header checkbox to also add a header file, calc_lib.h . Click OK.
- CLion буде add a add_library command to CMakeLists.txt and reload the project:
- Схоже до випадку executable targets, CLion автоматично створюють налаштування для library targets: However, це не без executable config, так, якщо ви намагаєтеся або скористайтеся ним, ви будете отримати Executable no specified error message:
- Для того, щоб отримати файл library, вам потрібно побудувати це налаштування. Виберіть його в кнопці і кнопки Ctrl+F9 або натисніть на значок: icon, як результат, libcmake_testapp_lib.
5. Reloading the project
Let's introduce деякі зміни в CMakeLists.txt manually. Для прикладу, додати STATIC до розголошення library target:
Коли ми змінюємо зміни в CMakeLists.txt , CLion показує icon icon suggesting to reload the project. Click it or press the shortcut:
Якщо ви впевнені, що CLion reload the project silently on every change in CMakeLists.txt , go to Settings | Build, Execution, Deployment | CMake and enable auto-reload:
6. CMake presets and CLion CMake profiles
Для налаштування і share CMake options для вашого проекту, ви можете використовувати CMake presets, CLion's CMake profiles, або both.
CMake Profiles мають багато налаштувань в одному з CMake Presets і є також shareable via VCS.Великою різницею є те, що profiles reference CLion toolchains, які не містять інформації, що не існує і не потребується в CMake presets (відповідно до debugger or environment settings).
CMake presets
CMake Presets є способи configure and share CMake options using two files:
- CMakePresets.json для project-wise builds. Цей файл може бути shared via VCS.
- CMakeUserPresets.json для розробників' own local builds. Цей файл не повинен бути застосований до VCS.
Внизу цих файлів має той самий формат і повинен бути розташований в проекті root directory.
Find out more on using presets in CLion: CMake presets
CMake profiles
До складу допоміжних інструментів включаються інструменти та типи будинків, як добре, як CMake options, так і генератори, і екологічні параметри. Ви можете налаштувати різні profiles для вашого проекту в порядку, для прикладу, використовуйте різні комп'ютери або доставляйте інструменти з різними налаштуваннями.
Натисніть на даному розділі для того, щоб додати посилання на профіль для Release build.
7. Build types
All the Run/Debug configurations created so far were Debug Налаштування, які є деталізованим типом типу CMake Profile, який був автоматично configured для нашого проекту.
Для прикладу, let's separate the Debug and Release будівництві. Для цього, add ( ) a новий CMake profile in Settings | Build, Execution, Deployment | CMake and set its build type to Release :
Notice Build directory field що specifies location of build results. Default folders є cmake-build-debug for Debug profiles and cmake-build-release for Release profiles. Ви можете встановлювати інші місця з вашої команди.
Залишити profil, and it буде appear in the switcher:
Перемикання параметрів або CMake profiles можуть впливати на процесор definitions, які використовуються для відповіді на ваш код. See resolve context for more information.
8. Adding include directories
Для використання інших headers розміщені в окремих директоріях, вам потрібно, щоб вони їдять для всіх повідомлень або деякі певні ones.
- Як example, let's create три directories під проектом проекту: includes , includes/general , and includes/math . Use the New | Directory option in the project tree context menu.
- Open CMakeLists.txt і придбати наступні команди:
target_include_directories (cmake_testapp_lib PUBLIC includes/math) target_include_directories (cmake_testapp_lib PUBLIC includes/general)
9. Linking libraries
Static libraries
На Step 4, ми створили статкову library названу cmake_testapp_lib (в подальшому filename is libcmake_testapp_lib.a ).
Новий рік's how how this library може бути з'єднаний до нашого проекту. Для convenience, ми будемо створювати і використовувати окремі складники для нього.
- Створити lib directory під проектом проекту root.
- Copy libcmake_testapp_lib.a з його default location, який є cmake-build-debug , до lib folder.
- Add the following commands to link this library to the cmake_testapp target:
- find_library дає змогу повний шлях до library,
- which we then pass directly into the target_link_libraries command via the $ variable.
Note : Make sure to place target_link_libraries after the add_executable command, so that CMake в даний час budgets target before linking the library.
Dynamic libraries
Для того, щоб ілюструвати загальні shared (dynamic) libraries, будуть існувати приклади з використанням LibPNG, a C library for reading і printing Portable Network Graphics (PNG) files.
Install the library package using vcpkg
CLion integrates with vcpkg, package manager for C/C++. Ви будете використовувати це quickly install library right from the IDE.
- Наведена ця інструкція до встановлення vcpkg.
- У vcpkg інструмент Windows, search for libpng :
- Клацніть Install в правому панелі і wait для налагодження.
Add the library to CMakeLists.txt
find_package(PNG REQUIRED) include_directories($10. CMake debug
У випадку вони є помилками або unwanted behaviour під час CMake configuration, ви можете помітити, що CMake script аналогічно до іншого коду в вашому проекті.
Debugger не дає змоги розробити ваш сучасний проект будівництва, і проект моделлю не буде перезавантажено після CMake execution під debug.
- Додаткові перемикання у вашому CMakeLists.txt файл або файли.
- Open the top-level CMakeLists.txt , натисніть на gutter icon next to the first command, and select Debug : When CMake generation fails, ви можете натиснути значок, щоб увімкнути кнопки в Windows, щоб запустити debugging: Ви можете also ask the AI Assistant натиснути на error.
- CLion буде запускати CMake debug session: Для подальшої інформації, refer to CMake debug features.
11. Tips on editing CMakeLists.txt
CLion забезпечує коди insight features для того, щоб працювати з CMake scripts ефективно. For example:
- Структура перегляду для CMake показує параметри, функції, macros, і targets використовує ваш script. Щоб відкрити його, натисніть Alt+7 (для інструментів) або Ctrl+F12 (для використання).
- Code completion works for best of elements in your CMakeLists.txt , including arguments of commands like find_package() :
- Quick Documentation popup helps you get more information on code elements. Щоб увійти в нього, use mouse hover or press Ctrl+Q . Ви можете переглядати quick documentation even for completion suggestions:
- Ви можете встановити колір і font scheme для CMake files in Settings | Editor | Color Scheme | CMake : Використовуйте код коду в CMake для багатьох подій на приємних нюансах.
12. Working with CTest
Це пояснює простий приклад того, як використовувати CTest, framework для compiling and running tests як частина з CMake build process. Ви можете дізнатися про загальний опис Framework в CTest support.
Add CTest to the sample project
- Створіть клінічну директорію під проектом проекту.
- Add the following files to the ctest directory:
- A source file addvalues_zero.cpp. Ви не можете використовувати цей файл з будь-яким CMake target for now.
- A header file assert_macro.h. Ви не можете використовувати цей файл з будь-яким CMake target for now.
- A CMakeLists.txt script.
- Add the following lines to ctest/CMakeLists.txt :
cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR) add_executable(ctest_exe_addvalues_zero addvalues_zero.cpp) target_link_libraries(ctest_exe_addvalues_zero LINK_PUBLIC cmake_testapp_lib est_exe_addvalues_zero) set_tests_properties(ctest_addvalues_zero PROPERTIES PASS 0)
Add the code to be tested
Let's prepare a code piece для тестування з CTest.
-
In calc_lib.cpp , add a simple function
Add the code inside the test sources
#include "assert_macro.h" #include "../calc_lib.h" int test_addvalues_zero() < int err_code = 0; assertEqual (add_values(0, 0) == 0); assertEqual (add_values(-5, 5) == 0); return err_code; >int main() < return test_addvalues_zero(); >Edit the CTest configuration
- У головному menu, go to Run | Edit Configurations.
- Під CTest Application node, ви будете виконувати автоматично створене All CTest configuration. Залежно від code, щоб бути tested є розташований в ctest_exe_addvalues_zero executable, буде потрібно вибрати, що executable є будовою target в configuration settings: To apply this to all CTest configurations in the project, click Edit configuration templates. в аркуші-ліфта кнопки того ж самого діалогу, виберіть CTest Application , і зміна target in the template:
- Let's also check the Test list to run field. Натисніть на піктограму icon для Open List of Available Tests dialog, where we can view and adjust the set of tests:
Для більше інформації про CTest Application template, refer to CTest run/debug configuration.
Run the CTest configuration and explore the results
- Виберіть All CTest в налаштування кнопки та натисніть або натисніть Shift+F10 .
- Find results in the Test Runner window:
13. Useful links
До dig deeper в CMake в CLion, з'ясувати, як:
- Change project root
- Reset CMake Cache
- Specify compiler flags
- Switch compilers
- Run Build actions and CMake install
- Використовуйте умови навколишнього середовища і CLION_IDE macro.
- Run CMake profiling
- Debug CMake
- Use CMake install
Налаштування IDE Clion та Cmake для роботи з STM32 та C++
Давно хотів спробувати себе у мікроконтролерах, вірніше були ідеї з їх використанням, які дуже хотілося реалізувати. Спочатку почав з PIC32 – вогонь контролери. Так виходило, що спочатку й коротив їхні порти, і з харчуванням завищував — невбивані (не зовсім звичайно, порт щоправда згорів, але сам контролер продовжував роботу). IDE MplabX непогана, підкуповував графічний блок з відображенням займаної RAM/Flash на обраному МК - зручно, але сам NetBeans як IDE це жерсть, ну не зручно жодного разу після Idea. Але проблема була не в цьому — як потім виявилося, PIC'і важко дістати, мало хто їх возить, а якщо й возить, то щодо високої ціни.
Далі вирішив копнути у бік STM32 - вони у великих кількостях, за базову периферію просять небагато, але головне - це доставання. (Але кодогенератор STM'а гірший за Microchip'a - весь файл загажений коментами і функціями, це звичайно сильно засмутило. У Microchip'а всі згенеровані функції винесені в окремі файли і main.c практично чистий - принадність).
(UPD: ось тут зізнаюся помилявся, дякую golf2109, він підказав, що від завалювання коментами і функціями файлу main.c можна позбутися, достатньо включити в налаштуваннях опцію для винесення згенерованого коду в окремі файли, але я все ж таки здивований, чому це не дефолтне налаштування, начебто логічно було б)
Тепер про IDE для STM32.
Спробував хвалений Keil - звичайно краще блокнота, але жахливо не зручний (ні нормальних підказок, ні нормального форматування, після Idea загалом не те пальто, особливо я так і не зрозумів як створювати пакети, чому не можна просто в віконці ткнути створити пакет і продовжити - матюгаться хочеться).
Потім спробував CooCox — набагато кращий і приємніший інтерфейс, добре налаштовується форматування (прямо порадувало налаштування перенесення параметрів у методах, та й інші налаштування дуже до речі), але знову ж таки не вистачало багатьох плюшок від Idea і знову ж таки проблеми з організацією пакетів.
Clion майже та ж Idea тільки для C/C++ і відразу захотілося її прикрутити, але виявилося досить проблематично (особливо для людини, яка з плюсами-то не сильна, особливо з усякими збирачами і компіляторами, парою сотень опцій компіляції). Почав із блогу JetBrains. Досить докладно описано, але це для минулих версій STM32CubeMX, в новій трохи змінилася структура каталогів, в результаті чого я деякий час не розумів, чому не компілиться. Потім розібрався - змінив шляхи, для cortex-m3 прибрав параметри -mfpu. Але знову не компілився. Далі виявилося, що я не той компілятор встановив, вірніше просто скачав його, але не вказав шлях до нього у файлі складання (ну важко пізно ввечері думати).
Головне в Clion'і поставити галочку в налаштуваннях 'Automaticaly Reload Cmake Project on Edit' (Settings -> Build, Execution, Deployment -> Cmake), тоді після правок не потрібно нічого очищати вручну.
Ще із змін - дебаггер, згаданий у блозі, перейменували в Ozone, його ще не тестував, пізніше відпишуся.
І остання проблема, що свердлила мозок. Дуже хотілося ООП, але не компілівся проект якщо я додавав файл C++, купа помилок з не знайденими функціями (наприклад, _exit, _sbrk тощо). Тут проблем було 2:
- у файлі CMakeLists.txt у блозі JetBrains не було виставлено прапор CXX у директиві project (потрібний для файлів C++)
- для виправлення помилок у файлі з блогу не вистачало опцій -specs=nosys.specs -specs=nano.specs після опції gc-sections. Вони саме створюють ці прототипи або навпаки ігнорують ці методи (тут не можу точно сказати)
- ставимо Clion
- заходимо в налаштування (Settings -> Build, Execution, Deployment -> Cmake) і ставимо галочку 'Automaticaly Reload Cmake Project on Edit'
- тут же вписуємо в поле Cmake options параметр -DCMAKE_TOOLCHAIN_FILE=STM32L1xx.cmake і у поле Generation path ставимо build (якщо змінити, то у файлах CMakeLists.txt і STM32L1xx.cmake потрібно його теж буде змінити)
- ставимо ARM компілятор (тут брав)
- імпортуємо проект (який попередньо згенерували в STM32CubeMx), кажемо, що можна створити CMakeLists.txt
- звідси або з мого репозиторію копіюємо вміст CMakeLists.txt у створений у Clion'e і додаємо файл STM32L1xx.cmake (можна обізвати як завгодно)
- в STM32L1xx.cmake правимо ім'я проекту в директиві project і можна прибрати CXX якщо не потрібен C++
- замінити у файлі CMakeLists.txt у директиві add_definitions(-DSTM32L100xC) на свій контролер
- для надійності можна зробити: Tools -> Cmake -> Reset Cache and Reload project і потім Tools -> Cmake -> Reload Cmake Project
- тепер можна збилдить
project(Skeleton C CXX ASM) cmake_minimum_required(VERSION 3.5.0) add_definitions(-DSTM32L100xC) set(FREERTOS_DIR Middlewares/Third_Party/FreeRTOS/Source/) file(GLOB_RECURSE USER_SOUR CES "Drivers/ STM32L1xx_HAL_Driver/Src/*.c") file( GLOB_RECURSE FREERTOS_SOURCES "$/*.c" "$/CMSIS_RTOS/*.c" "$/portable/GCC/ARM_CM3/*.c" ) add_library( CMSIS Src/system c startup/startup_stm32l100xc.s ) include_directories(Inc) include_directories(Src/gps/parser/nmea) include_directories(Drivers/STM32L1xx_HAL_Driver/Inc) include_directories(Drivers/CMSIS/Include) include_directories(Drivers/C _directories($) include_directories ($/CMSIS_RTOS) include_directories($/include) include_directories($/portable/GCC/ARM_CM3/) include_directories($/portable/GCC/MemMang) add_executable($.elf $ $ $ $) tarIS_link_libraries($.elf (CMAKE_EXE_LINKER_FLAGS "$-Wl,-Map=$/build/$.map") set(HEX_FILE $/build/$.hex) set(BIN_FILE $/build/$.bin) add_custom_command(TARGET $.elf POST_BUILD COMMAND $ -Oihex $ $COMMAND$-Obinary$ $ COMMENT "Building $ \nBuilding $")
INCLUDE(CMakeForceCompiler) SET(CMAKE_SYSTEM_NAME Generic) SET(CMAKE_SYSTEM_VERSION 1) # Specify cross compiler. arm-none-eabi-gcc і arm-none-eabi-g++ є повністю затребуваним CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU) CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-g++ GNU) SET(LINKER SET(COMMON_FLAGS "-mcpu=cortex-m3 -O2 -mthumb -ffunction-sections -fdata-sections -g -fno-common -fmessage-length=0") SET(CMAKE_CXX_FLAGS_INIT "$-std=c++11") SET(CMAKE_C_FLAGS_INIT "$-std=gnu99") SET(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,-gc-sections -specs=nosys.specs -specs=nano.specs -T$")
Працювати стало приємно, але поки що заливаю прошивку через STM'івську утиліту, потім спробую накрутити OZONE. На запитання відповім (якщо зможу).
Російські Блоги
Як використовувати CMake для імпорту сторонніх бібліотек у CLion
set(LINK_DIR /usr/lib2/libnet-1.2-rc3/src/.libs) set(LINK_DIR2 /usr/lib2/libpcap-1.0.0) set(PRO simple_network_sniffer) # 1.cmake verson, вкажіть версію cmake cmake_minimum_requi 3.2) # 2. ім'я проекту, вкажіть ім'я проекту, зазвичай відповідне імені папки проекту PROJECT($) # 3. шлях до файлу заголовка, каталог файлу заголовка INCLUDE_DIRECTORIES( include ) link_directories($ $) link_libraries(net pcap) каталог, каталог вихідних файлів AUX_SOURCE_DIRECTORY(src DIR_SRCS) # 5. встановити змінне середовище, встановити змінне середовище, всі вихідні файли, що використовуються для компіляції, повинні бути поміщені сюди, інакше компіляція пройде, але під час виконання будуть виникати різні проблеми, такі як «помилка пошуку символу xxxxx, невизначений символ» #SET(TEST_MATH $) # 6. додати виконуваний файл, додати файл для компіляції ADD_EXECUTABLE($ $) # 7.додати бібліотеку посилань, додати бібліотеку, необхідну для файлу, що виконується, наприклад, якщо ми використовуємо libm.so (правило іменування: lib + name + .so), додаємо ім'я бібліотеки TARGET_LINK_LIBRARIES($ net pcap)
CMake - це кроссплатформенний інструмент для встановлення (компіляції), ви можете простими пропозиціями описати установку (процес компіляції) всіх платформ. Він може виводити різні файли збірки або проекту, а також тест Функції C++, що підтримуються компілятором, аналогічні функціям automake в UNIX.
Як використовувати CMake
Усі оператори CMake записуються у файл із ім'ям CMakeLists.txt. Коли файл CMakeLists.txt підтверджено, можна використовувати команду ccmake для налаштування відповідних значень змінних. Ця команда повинна вказувати на каталог, де знаходиться CMakeLists.txt. Після завершення налаштування використовуйте команду cmake для створення відповідного make-файлу (у Unix-подібній системі) або файлу проекту (при компіляції за допомогою відповідного інструменту програмування під вікном).
Базовий робочий процес:
Де каталог - це каталог, де знаходиться CMakeList.txt;
- Перший оператор використовується для налаштування параметрів компіляції, таких як каталог VTK_DIR. Як правило, цей крок не вимагає налаштування, просто виконайте другий оператор безпосередньо, але при виникненні помилки вам необхідно розглянути конфігурацію тут, і цей крок дійсно стане в нагоді;
- Друга команда використовується для створення файлів Makefile відповідно до CMakeLists.txt;
- Третя команда використовується для виконання файлу Makefile, компіляції програми та створення виконуваного файлу;
Виконання CMake дуже просте. Складність у тому, як написати файл CMakeLists.txt. Нижче наводиться короткий вступ до підготовки файлу CMakeLists.txt з прикладом. Перегляньте наступний файл CMakeLists.txt.
#project name PROJECT(test_math) #head file path INCLUDE_DIRECTORIES(include ) #source directory AUX_SOURCE_DIRECTORY(src DIR_SRCS) ./bin/bin $) #add link library TARGET_LINK_LIBRARIES(../bin/bin $)
Або використовуйте наступний CMakeLists.txt
#project name PROJECT(test_math) add_definitions("-Wall -lpthread -g") #head file path INCLUDE_DIRECTORIES(include ) #source directory AUX_SOURCE_DIRECTORY(src DIR_SRCS) #set environment variable SET(TEST_MATH $ ) # libm.so ) # set output binary path SET(EXECUTABLE_OUTPUT_PATH $/bin) SET(FS_BUILD_BINARY_PREFIX "Yfs") #add executable file ADD_EXECUTABLE($sqrt $) #add link library TARGET_LINK_LI
Це CMakeLists.txt програми для тестування математичних функцій, вміст після "#" - це коментар команди CMake все у верхньому регістрі.
Другий рядок вказує, що згенерований проект називається test_math.
Рядок 4 визначає каталог файлу заголовка як включений
Рядок 8 вказує каталог вихідного файлу як src та призначає його змінною оточення DIR_SRCS.
Рядок 10 встановлює значення змінного середовища TEST_MATH, що дорівнює значенню змінного середовища DIR_SRCS, тут використовується, щоб показати, як використовувати змінні середовища для присвоєння значень змінним середовища.
Рядок 14 призначає бібліотеку математичних функцій змінного середовища LIBRARIES. Звичайно, це змінне середовище можна не вказувати, а ім'я бібліотеки можна використовувати безпосередньо пізніше.
Рядок 18 використовується для вказівки згенерованого файлу, компіляції всіх файлів у каталозі змінного середовища TEST_MATH для створення виконуваного файлу bin у каталозі ../bin
У 20-му рядку вказано, що бібліотека компонування під час виконання ../bin/bin є значенням змінного середовища LIBRARIES-libm.so.
Помістіть CMakeLists.txt у поточний каталог та виконайте CMakeLists.txt
Ви можете згенерувати файл, що виконується, файл bin в каталозі / bin, і запустити його, щоб побачити, чи відповідає результат очікуваному.
1. Основне використання
Установка: Після завантаження бінарного пакета його можна одразу розпакувати та використати.
Щоб встановити вихідний код, виконайте команду: ./bootstrap; make; зробити install-failed to try to run bootstrap.
Використовуйте: cmake dir_path, згенеруйте файли проекту чи файли makefile
По-друге, концепція
out-of-sourceСкладання, на відміну від збирання з вихідного коду, тобто розміщення скомпільованих вихідних файлів та вихідних файлів у різних каталогах;
По-третє, основна структура
1. Покладіться на файл CMakeLists.txt, можна вказати одну головну мету проекту та підкаталоги, включені до основного каталогу;
2. Використовуйте проект, щоб вказати ім'я проекту в проекті CMakeLists.txt, add_subdirectory, щоб додати підкаталоги
3. Підкаталог CMakeLists.txt успадкує налаштування батьківського каталогу CMakeLists.txt (підлягає перевірці).
4. Граматика
2. Змінні: використовуйте команду set для явного визначення та присвоєння значень. В операторах, відмінних від if, використовуйте $ <> для посилання та безпосередньо використовуйте імена змінних в операторах if; наступні команди set очистять вихідне значення змінної;
3. command (args . ) # Команди не чутливі до регістру, параметри поділяються пробілами, а для укладання прогалин у параметрах використовуються подвійні лапки.
4. set (var a; b; c) set (var a b c) # define variable var і привласнити їй a; b; c такий список рядків
5. Add_executable ($ ) Add_executable (ab c) #variable use $ посилання
6. Умовна заява:
if (var) #var Непусто 0 N Ні OFF FALSE . # Використання в неробочому режимі НЕ
8. Заява про зашморг
V. Внутрішні змінні
CMAKE_C_COMPILER: Вкажіть компілятор C
CMAKE_CXX_COMPILER:
CMAKE_C_FLAGS: Параметри компіляції файлів C, такі як -g; Ви також можете додати параметри компіляції через add_definitions
EXECUTABLE_OUTPUT_PATH: Шлях зберігання виконуваного файлу
LIBRARY_OUTPUT_PATH: Шлях до файлу бібліотеки.
CMAKE_BUILD_TYPE:: Тип складання (Налагодження, Випуск, . ), CMAKE_BUILD_TYPE = Налагодження
BUILD_SHARED_LIBS:Switch between shared and static libraries
Використання вбудованих змінних:
>> Вкажіть у CMakeLists.txt, використовуйте set
>> Використовується в команді cmake, наприклад cmake -DBUILD_SHARED_LIBS = OFF
По-шосте, порядок
project(ПРИВІТ) # Вказуємо назву проекту, назву згенерованого проекту ВК;
>> Використовуйте $, щоб вказати кореневий каталог проекту.
include_directories: Вкажіть шлях пошуку файлу заголовка, що еквівалентно вказівці параметра -I gcc
>> include_directories ($ / Hello) # Додати Hello, щоб увімкнути каталог
link_directories: Шлях пошуку бібліотеки динамічного компонування або бібліотеки статичного компонування, що еквівалентно параметру -L gcc
>> link_directories ($ / Hello) # Додати Hello як каталог посилань
add_subdirectory: Містить підкаталоги
add_executable: Скомпілюйте програму, що виконується, вкажіть компіляцію, начебто можна додати файл .o
>> add_executable (helloDemo demo.cxx demo_b.cxx) # Скомпілювати cxx у виконуваний файл -
add_definitions: Додати параметри компіляції
>> add_definitions (-DDEBUG) додасть визначення макросу DEBUG до командного рядка gcc;
>> add_definitions( “-Wall -ansi –pedantic –g”)
target_link_libraries: Додати бібліотеку посилань, як за вказівкою параметра -l
>> target_link_libraries (demo Hello) # Підключити виконуваний файл та Hello до фінального файлу demo
add_library:
>> add_library (Hello hello.cxx) # Скомпілюйте hello.cxx у статичну бібліотеку, таку як libHello.a
add_custom_target:
message(status | fatal_error, "message"):
set_target_properties( . ): lots of properties. OUTPUT_NAME, VERSION, .
link_libraries( lib1 lib2 . ): All targets link with the same set of libs
Сім, опис
1. Makefile, створений CMAKE, може обробляти зміну файлу .h та компілювати лише необхідний файл cpp;
8. FAQ
1) Як отримати всі вихідні файли в каталозі
>> Збережіть всі вихідні файли (крім файлів заголовків) в каталозі змінної, а потім використовуйте add_executable (ss7gw $ ).
2) Як вказати мету компіляції проекту
>> Позначення команди проекту
3) Як додати динамічні та статичні бібліотеки
>> Додати команду target_link_libraries
4) Як роздрукувати повідомлення під час виконання CMAKE
>> message([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" . )
>> Зверніть увагу на корпус
5) Як вказати заголовковий файл та шлях до файлу бібліотеки
>> include_directories та link_directories
>> Може викликатися кілька разів для встановлення кількох шляхів
>> link_directories впливає тільки на цілі, що стоять за ним
6) Як відрізнити налагоджувальну версію від релізної
>> Створіть два каталоги налагодження / випуску, відповідно виконайте cmake -DCMAKE_BUILD_TYPE = Debug (або Release). Коли потрібно скомпілювати різні версії, введіть різні каталоги і виконайте make;
Версія налагодження використовуватиме параметр -g; версія випуску використовуватиме -O3 -DNDEBUG
>> Інший спосіб налаштування – наприклад, версія DEBUG для встановлення параметрів компіляції DDEBUG
Просто додайте параметри під час виконання cmake, наприклад cmake -D DEBUG_mode = ON
7) Як встановити умовну компіляцію
НаприкладУ налагоджувальній версії встановлюється параметр компілятора DEBUGІ зміни не повинні змінювати CMakelist.txt
>> Використовуйте команду option, наприклад:
option(DEBUG_mode "ON для debug або OFF for release" ON)
>> Як зробити його ефективним: спочатку cmake генерує make-файл, а потім make edit_cache для редагування параметрів компіляції; Linux Потім відкриється текстове поле, ви можете змінити його, а потім make для генерації цільового файлу після того, як це буде зроблено - emacs не підтримує make edit_cache;
>> Обмеження: цей метод не може безпосередньо встановити згенерований make-файл, але повинен використовувати команди для встановлення параметрів перед make; для налагоджувальної та випускної версій це еквівалентно двом каталогам: cmake та make edit_cache відповідно;
>> Бажаний ефект: безпосередньо вказати елемент перемикання через параметр при виконанні cmake та згенерувати відповідний make-файл - це можна зробити, наприклад cmake -DDEBUGVERSION = ON
8) Як додати визначення макросу компіляції
>> Використовуйте команду add_definitions, див. Опис розділу команд
9) Як додати залежності компіляції
Використовується, щоб гарантувати, що залежність має бути побудована перед компіляцією цільового проекту
10) Як вказати цільовий каталог документів
>> Створіть новий каталог, виконайте cmake у каталозі для створення файлу Makefile, щоб результат компіляції був збережений у цьому каталозі, аналогічному
11) Папок багато, чи потрібно кожну папку збирати у файл бібліотеки?
>> Ви не можете використовувати CMakeList.txt у підкаталозі, а безпосередньо вказувати підкаталог у верхньому каталозі
12) Як встановити залежну версію cmake
13) Як вказати відносний шлях
>> $ представляє кореневий каталог вихідного файлу, $ уявляє кореневий каталог двійкового файлу?
14) Як настроїти каталог для компіляції проміжних файлів
15) Як використовувати порівняння рядків чи чисел у пропозиціях IF
>> Порівняння чисел LESS, GREATER, EQUAL, порівняння рядків STRLESS, STRGREATER, STREQUAL,
IF(AAA STREQUAL abc)
Повідомлення (СТАТУС "істина") # повинен виводити істину
16) Чи компілювати лише необхідні файли cpp при зміні файлу h
17) На машині встановлені VC7 та VC8, CMAKE автоматично виконає пошук компілятора, але як вказати певну версію?
18) Як вказати параметри компіляції залежно від ОС
>> IF (APPLE); IF(UNIX); IF(WIN32)
19) Чи можуть команди до і після компіляції виконуватися автоматично?
>> Так, підлягає уточненню
20) Як роздрукувати висновок make
Інтелектуальна рекомендація
clion cmake c++
Зміст 1. Один тип модуля одного проекту 1.1 Виконати Cmake 1.2 Вручну додати cmakelists.txt 1. Один тип модуля одного проекту Після створення проекту вручну додайте модуль та компіліру.
Vcpkg+clion+cmake+mingww
Vcpkg+clion+cmake+mingww VCPKG вступ Встановіть VCPKG Встановити Встановіть Cmake Під платформою Windows Під платформою Ubuntu Встановіть Mingw Використовуйте VCPKG в Clion Встановіть jsoncpp Cmake іс.
