Използване на Cmake за автоматично генериране на makefile в проекти

Въведението е дълго, тъй като обяснява подробно защо е необходим cmake. Можете веднага да подрежете, ако вече знаете.

Въведение

Съставянето на проект на ръка е загуба на време. Това всъщност е аксиома и тези, които програмират, знаят за това. Но за да се компилира всичко автоматично, трябва да зададете правилата, нали? Често и по старомоден начин те използват makefile за * nix или някакъв nmake за windows.
Въпреки че програмирам от няколко години и съм ръчно компилирал прости автоматични асемблери на проекти, базирани на makefile, трябва да забравя малко и да се науча отново как да съставя тази умна схема. По принцип трябва да правите проекти, проектирани за всяка една система, било то linux или windows, и често не са компилирани взаимно помежду си. За преносимост се използва makefile автоматик и автоген, но синтаксисът им е още по-объркващ. Няма да кажа, че изборът е идеален, но за себе си реших да премина към cmake, тъй като той е пренесен за всичко налично. Струваше ми се по-разбираемо. Ще се опитам да обясня основите. Правилата пишете с думи и от тях се генерира makefile, който вече стартирате по стандартния начин.

Защо е необходимо? Така че при прехвърляне на друга машина, с различни пътища, вие изграждате проекта с две команди, без да поправяте нищо в makefile. Но има конфигурация? Това е алтернатива. И конфигурирането не е междуплатформено, за да го генерирате се нуждаете от autoconf/autogen, за което също има набор от правила. Само предимства? Компилацията с автоматично генериран makefile е малко по-бавна от стария начин. Но Qt използва cmake и никой не се оплаква.

Приготвяме се да започнем

Нека имаме малко source.cpp от който получаваме софтуера - поставете го в папката src. Но ние имаме същия проект, така че има още няколко файла core.cpp, core.hpp, common.hpp, types.hpp, които също поставяме в src и ни трябва някаква библиотека например pthread. Разбрахме източниците, продължихме да описваме проекта и да го подготвим за автоматично компилиране.

Всичко започва със създаване на файл CMakeLists.txt в основата на проекта. Правилата на CMake са като скриптов език, средно положение между javascript и php. Само много по-лесно. Има условия, функции, променливи, константи, приставки.

Ще разделя файла CMakeLists.txt на няколко части, за да ги обясня. Част 1:

Тук cmake_minimum_required функция за проверка на версията.
Изявленията са написани така, сякаш () се отварят и endif () се затварят. Подобно на foreach () и endforeach ().
Функцията за съобщения показва нашето съобщение. Използвах знамето FATAL_ERROR, за да посоча вида на съобщението.
Също така имайте предвид, че няма точка и запетая (;) в края на командите. Има един ред - една команда. Скобите се отдалечиха от изявленията само за четливост.
Всяка команда обикновено има няколко опции за задаване на параметри, така че не можете да направите, без да погледнете ръководството.
Има кратко въведение и прост пример в документацията, но според мен твърде прост.

Функцията set () създава или презаписва променливи. Ако няма стойност, тогава променливата ще бъде празна. Променливите, зададени тук, се именуват според значението, което те носят в поколението.