Збірка проектів з cmake
Для автоматизації збирання проектів традиційно використовують системи збирання, такі як make на Unix подібних системах і nmake для компілятора Microsoft. Також традиційно написання файлів для збірки проекту під ці системи є завданням нетривіальною. Звичайно в користуючись тільки Mictosoft Visual Studio можна навіть не підозрювати про існування цих файлів, так як інтегроване середовище розробки досить зручно приховує всю кухню, залишаючи зовні кілька діалогових вікон і кнопку Build. Але для складних проектів використовують масу сторонніх бібліотек і кроссплатформенних проектів такий підхід часто виявляється неприйнятним.
Коротко кажучи make-файл являє собою опису послідовності дій необхідних для того щоб досягти якоїсь мети, наприклад скомпілювати програму. На псевдокоді це може виглядати приблизно так:
Що потрібно зробити?
Зібрати програму hello_world.
Як її робити?
Взяти файли hello_world.h і hello_world.cpp і запустити компілятор передавши їх в якості параметрів.
Що робити коли компілятор закінчить працювати?
Взяти вийшов в результаті роботи компілятора об'єктний файли hello_world.o і запустити лінковщік передавши йому цей файл.
Причому кожен підпроект може мати свій файл збірки, а головний make-файл зможе пройти рекурсивно по підпроектах, виконавши його файл збірки, а потім зібрати проект з цих компонентів.
Виглядає все просто, проблеми виникають далі і проблем кілька:
- Дозвіл залежностей виникають між частинами проекту
- Синтаксична складність і неоднозначність класичних make-файлів
- Прив'язка до конкретної утиліті автоматичного складання і як наслідок непереносимість на інші платформи
Я пропоную розглянути CMake. як простий для вивчення, зрозумілий, потужний і багатоплатформовий інструмент, який вирішує відразу всі три проблеми. Подробиці нижче.
Сам CMake не провадить збірку проекту, він лише генерує зі свого файлу збірки make-файл для конкретної платформи. Це може бути проект Microsoft Visual Studio, NMake makefile, проект XCode для MacOS, Unix makefile, Watcom makefile, проект Eclipse або CodeBlocks. Більш того файли CMake відкриває як проект набирає популярність середовище розробки QtCreator.
Даний файл зазвичай називається CMakeLists.txt і містить команди зрозумілі CMake. виконавши
Ми отримаємо або проект який можна відкрити у вашому середовищі розробки, або makefile за яким можна зібрати проект запустивши відповідну систему збирання (make, nmake, wmake). Завжди можна явно вказати, що повинна генерувати програма, вказавши ключ -G з потрібним параметром (просто запустіть cmake. Щоб побачити доступні варіанти).
Де взяти CMake?
Hello, World!
Пропоную розглянути простий CMake-файл: