CMake Tutorial — различия между версиями
Bobrov (обсуждение | вклад) |
Bobrov (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
// Тут скоро будет туториал по CMake. | // Тут скоро будет туториал по CMake. | ||
+ | |||
+ | = Что это и зачем нужно = | ||
+ | CMake — кроссплатформенная автоматизированная система сборки проектов. | ||
+ | Непосредственно сборкой она не занимается, а только генерирует Makefile, который потом будет выполнен утилитой make. | ||
+ | |||
+ | CMake может проверять наличие необходимых библиотек и подключать их, собирать проекты под разными компиляторами и операционными системами. Т.е. у вас есть куча кода и файлик, содержащий информацию для cmake, и чтобы скомпилить | ||
+ | это дело где-нибудь еще, вам нужно просто запустить там cmake, который сделает всё сам. Удобно, полезно, просто. | ||
+ | <span style="color:#a0a0a0">Дисклеймер: Никита все еще считает, что cmake не нужен, но Никита извращенец и просто дурак.</span> | ||
+ | |||
+ | = Старт = | ||
+ | Предполагается, что найти и скачать сам cmake ты, %username%, в состоянии. | ||
+ | |||
+ | Предположим, у Вас есть исходничек "test.cpp". | ||
+ | Для начала нужно создать файлик для cmake, который обычно называют "CMakeLists.txt", и написать туда вот это: | ||
+ | |||
+ | add_executable(test test.cpp) | ||
+ | |||
+ | Теперь запускаем (из консоли) в этой папке команду "cmake CMakeLists.txt" (аргументом можно передавать не только файл, но и папку, в которой он лежит, тогда cmake найдет его сам). | ||
+ | cmake возьмет этот файлик и, основываясь на нем, создаст проект, а именно много-много файлов, папочек и т.д. | ||
+ | Нас больше всего интересует сгенерированный Makefile (проверьте, он тоже должен быть в папочке). | ||
+ | В той же папке запускаем make (аргументы такие же, как у cmake, т.е. можно сам makefile, можно папку, в которой он лежит; без аргументов make ищет makefile в текущем каталоге). | ||
+ | В консоли вылезет примерно такой текст: | ||
+ | |||
+ | Scanning dependencies of target test | ||
+ | [100%] Building CXX object CMakeFiles/test.dir/test.cpp.o | ||
+ | Linking CXX executable test | ||
+ | [100%] Built target test | ||
+ | |||
+ | А у Вас в папочке появится исполняемый файл "test". Запустите, убедитесь, что это действительно то, что ожидается от компилляции файла "test.cpp". | ||
+ | |||
+ | = We need to go deeper = | ||
+ | |||
+ | Поразбираемся с различными командами cmake. | ||
+ | |||
+ | === Указание необходимой версии cmake === | ||
+ | |||
+ | cmake_minimum_required(VERSION 2.6) | ||
+ | |||
+ | Если используемая версия cmake меньше 2.6, он не захочет работать. Писать эту команду всегда - хороший стиль. | ||
+ | |||
+ | === Название проекта === | ||
+ | |||
+ | project(visualization) | ||
+ | |||
+ | Тут все понятно. Тоже хороший стиль. | ||
+ | |||
+ | === Переменные === | ||
+ | |||
+ | В cmake можно создавать текстовые переменные. Команда | ||
+ | |||
+ | set(VARIABLE The variable's value) | ||
+ | |||
+ | запишет в переменную "VARIABLE" значение "The variable's value". | ||
+ | Чтобы где-либо использовать значение этой переменной, нужно написать ${VARIABLES}. | ||
+ | |||
+ | Чтобы добавить к переменной некий текст, можно сделать так: | ||
+ | |||
+ | set(VARIABLE "${VARIABLES} new text") | ||
+ | |||
+ | Как видите, использовать значение можно и внутри кавычек. | ||
+ | Переменные активно используются различными библиотеками - для установки флагов, параметров сборки/линковки и прочих вкусностей. |
Версия 20:55, 29 марта 2013
// Тут скоро будет туториал по CMake.
Содержание
Что это и зачем нужно
CMake — кроссплатформенная автоматизированная система сборки проектов. Непосредственно сборкой она не занимается, а только генерирует Makefile, который потом будет выполнен утилитой make.
CMake может проверять наличие необходимых библиотек и подключать их, собирать проекты под разными компиляторами и операционными системами. Т.е. у вас есть куча кода и файлик, содержащий информацию для cmake, и чтобы скомпилить это дело где-нибудь еще, вам нужно просто запустить там cmake, который сделает всё сам. Удобно, полезно, просто. Дисклеймер: Никита все еще считает, что cmake не нужен, но Никита извращенец и просто дурак.
Старт
Предполагается, что найти и скачать сам cmake ты, %username%, в состоянии.
Предположим, у Вас есть исходничек "test.cpp". Для начала нужно создать файлик для cmake, который обычно называют "CMakeLists.txt", и написать туда вот это:
add_executable(test test.cpp)
Теперь запускаем (из консоли) в этой папке команду "cmake CMakeLists.txt" (аргументом можно передавать не только файл, но и папку, в которой он лежит, тогда cmake найдет его сам). cmake возьмет этот файлик и, основываясь на нем, создаст проект, а именно много-много файлов, папочек и т.д. Нас больше всего интересует сгенерированный Makefile (проверьте, он тоже должен быть в папочке). В той же папке запускаем make (аргументы такие же, как у cmake, т.е. можно сам makefile, можно папку, в которой он лежит; без аргументов make ищет makefile в текущем каталоге). В консоли вылезет примерно такой текст:
Scanning dependencies of target test [100%] Building CXX object CMakeFiles/test.dir/test.cpp.o Linking CXX executable test [100%] Built target test
А у Вас в папочке появится исполняемый файл "test". Запустите, убедитесь, что это действительно то, что ожидается от компилляции файла "test.cpp".
We need to go deeper
Поразбираемся с различными командами cmake.
Указание необходимой версии cmake
cmake_minimum_required(VERSION 2.6)
Если используемая версия cmake меньше 2.6, он не захочет работать. Писать эту команду всегда - хороший стиль.
Название проекта
project(visualization)
Тут все понятно. Тоже хороший стиль.
Переменные
В cmake можно создавать текстовые переменные. Команда
set(VARIABLE The variable's value)
запишет в переменную "VARIABLE" значение "The variable's value". Чтобы где-либо использовать значение этой переменной, нужно написать ${VARIABLES}.
Чтобы добавить к переменной некий текст, можно сделать так:
set(VARIABLE "${VARIABLES} new text")
Как видите, использовать значение можно и внутри кавычек. Переменные активно используются различными библиотеками - для установки флагов, параметров сборки/линковки и прочих вкусностей.