Изменения

Перейти к: навигация, поиск

CMake Tutorial

1013 байт добавлено, 20:12, 15 января 2014
We need to go deeper
cmake_minimum_required(VERSION 2.6)
Если используемая версия cmake меньше 2.6, он не захочет работать. Писать эту команду всегда - хороший стиль(cmake будет пыхтеть и обижаться, если вы не укажете версию, но собирать всё равно всё будет).
=== Название проекта ===
project(visualization)
Тут все понятноУказывает, что этот cmake-файл является корневым для некоторого проекта. Тоже хороший стильС проектами связаны определенные переменные и поведение cmake (читайте документацию).
=== Переменные ===
=== Устанавливаем команды компилятору ===
add_definitions(-std=c++11 -WallDSOME_IMPORTANT_DEFINITION)
Компилятору при компиляции добавляются соответствующие опции.Кто не знает: "-std=c++11" включает Эта команда используется для установки дефайнов, который можно проверить в gcc поддержку стандарта c++11коде через, "-Wall" говорит gcc выводить все предупреждениянапример, #ifdef SOME_IMPORTANT_DEFINITION.Сказать флаги для с++ можно и через переменные:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
 
Эта команда добавит к флагам, используемым при сборке c++-кода, флаги -std=c++11 и -Wall.
 
Кто не знает: "-std=c++11" включает в gcc поддержку стандарта c++11, "-Wall" говорит gcc выводить все предупреждения (очень советую, помогает отловить много глупых багов и писать аккуратный код).
Если ваша версия GCC меньше, чем 4.7.0, вместо -std=c++11 нужно использовать -std=c++0x.
Первое - мы не хотим, чтобы буст подключался к нам статически (т.е. хотим динамическую линковку). <span style="color:#a0a0a0">Если ты, %username%, не знаешь, что это, пока просто забей и используй этот флаг так, как написано. Но в ближайшее время узнай, о чем речь.</span>
Второй флаг разрешает бусту внутри своих магических реализации реализаций использовать треды для распараллеливания и прочих радостей.
Итак, мы установили флаги. Давайте найдем буст!
Опция "REQUIRED" говорит о том, что библиотека необходима проекту.
Без нее cmake решит, что отсутствие данной библиотеки - не так уж и страшно, и будет собирать дальше.
 
Добавим директории с хедерами буста для поиске в них хедеров:
 
include_directories(${Boost_INCLUDE_DIRS})
Итак, осталось найденные библиотеки подключить к исполняемому файлу.
В качестве библиотек нужно указать пути к необходимым собранным библиотекам. cmake нашел указанные нами библиотеки и записал в переменную, чем мы и пользуемся.
 
Заметим, что эту команду нужно вызывать после того, как создан target сборки (через add_executable).
=== Пример хорошего CMakeLists.txt и где он будет лежать ===
54
правки

Навигация