Comments 23
UFO just landed and posted this here
1. В нашем проекте используется пачка статических библиотек, Ogre, Xml2, OpenAL, SDL, Boost и ещё несколько. Всё это разбито на 3 подпроекта + главный проектный файл, итого 181 сточка. Необходимо учитывать, что сюда входит список исходников.
2. C XML вы тоже что-то путаете. Слишком весомый. JSON это да. Но есть одно «но»: JSON это стандарт rfc4627, датируемый 2006 годом, первые версии CMake появились в 2003. Поэтому за основу был взять Bash.
3. Тут вы правы, но когда начальство требует, что бы проект открывался в CodeBlocks, это экономит кучу времени.
2. C XML вы тоже что-то путаете. Слишком весомый. JSON это да. Но есть одно «но»: JSON это стандарт rfc4627, датируемый 2006 годом, первые версии CMake появились в 2003. Поэтому за основу был взять Bash.
3. Тут вы правы, но когда начальство требует, что бы проект открывался в CodeBlocks, это экономит кучу времени.
UFO just landed and posted this here
1. Заведено 4 CMakeLists.txt — 3 подпроекта: движок и логика в виде библиотек, лаунчер. Все это объедятся одним родительским проектом.
2. Личные предпочтения. Возможно, я тоже предпочту XML, если вы мне подскажете хороший инструментарий.
3. Начальство бывает разное, некоторое и код иногда просматривает, а некоторое и само свои проекты имеет.
2. Личные предпочтения. Возможно, я тоже предпочту XML, если вы мне подскажете хороший инструментарий.
3. Начальство бывает разное, некоторое и код иногда просматривает, а некоторое и само свои проекты имеет.
простой и понятный синтаксис;
Поделили на ноль. Куча неочевидных конструкций, сплошные макросы с непонятной областью видимости, загрязнение глобальной области видимости. Идиотский синтаксис условных выражений и придурковатый способ поиска зависимостей.
В итоге написал пару более менее декларативных оберток над этим ужасом, но с каждым днем все больше хочется от него избавится!
github.com/gorthauer/cmake-utils
Я уже молчу про чудовищно тормозную компиляцию на windows'е. Просто ни в какие ворота не лезет, qbs на том же самом коде в 10 раз быстрее справляется!
Имея лишь начальные знания английского языка, любое ключевое слово не остается для меня загадкой.
Все функции имеют более или менее унифицированный способ вызова — на первом месте всегда стоит объект, подвергающийся обработке. Разное количество параметров — уж извините, для разных действий необходимы различные параметры.
Поддержка чужих CMakeLists.txt сходна с поддержкой любого кода: превосходный код — незамысловатая поддержка, индусский код — тихий ужас.
Тормозная компиляция это проблема не CMake. Она ничего сама не компилирует.
За ссылку спасибо.
Все функции имеют более или менее унифицированный способ вызова — на первом месте всегда стоит объект, подвергающийся обработке. Разное количество параметров — уж извините, для разных действий необходимы различные параметры.
Поддержка чужих CMakeLists.txt сходна с поддержкой любого кода: превосходный код — незамысловатая поддержка, индусский код — тихий ужас.
Тормозная компиляция это проблема не CMake. Она ничего сама не компилирует.
За ссылку спасибо.
Там где можно было бы написать одну строку,
Пишется семь:
И, при выставленном флаге REQUIRED, зачем-то всё равно проверяется статус операции.
Отличный императивный язык, да. И парсить его будет несложно. Автору спасибо.
includes += required(libxml2).include_dir
Пишется семь:
find_package(LibXml2 REQUIRED)
if(NOT LIBXML2_FOUND)
message(SEND_ERROR "Failed to find LibXml2")
return()
else()
include_directories(${LIBXML2_INCLUDE_DIR})
endif()
И, при выставленном флаге REQUIRED, зачем-то всё равно проверяется статус операции.
Отличный императивный язык, да. И парсить его будет несложно. Автору спасибо.
Я не претендую на специалиста по CMake, я лишь попытался описать то, с чем сам сталкивался. Знаете, при выставленном флаге REQUIRED и не установленной библиотеке ветка if выполнялась все равно. debian sid/wheezy. Может я и не умею готовить CMake, но таким образом я отгородил себя от ошибок на стадии сборки. Не забывайте, статья все-таки для новичков.
И да, ваш пример красив, есть куда расти.
И да, ваш пример красив, есть куда расти.
UFO just landed and posted this here
Два дня, две отличных статьи по CMake. Спасибо.
Всегда пожалуйста. Не было статей, не было. А тут что-то двоих сразу пропёрло.
Мне чем CMake приглянулся, так это тем, что позволяет собирать проекты не только для ПК, но и для микроконтроллеров (в принципе разницы нет). Например для STM32. Я уже приспособил Sublime Text 2 для этого дела, а системой сборки как раз выбрал Cmake, благо была статья одного товарища, где он всё немного пояснил по этому поводу.
Но полного понимания работы пока нет. А такие статьи, как ваша, очень помогают в этом.
Но полного понимания работы пока нет. А такие статьи, как ваша, очень помогают в этом.
Спасибо, буду давать сюда линк тем, кто начинает осваивать :)
Очень жаль, что пример 5 не описан так детально, как и предыдущие, а просто копипаст с cmake-кого wiki. Не могу разобратся куда и как вставить этот кусок кода, чтобы все собралось без ошибок. Может кто еще здесь подскажет?
Автор молодец!
Отличная статья, все здорово расписано
Отличная статья, все здорово расписано
Вести из нового времени. Вышел выпуск подкаста C++Cast с участием Крейг Скотт: "Professional CMake". Крейг является co-maintainer в проекте CMake и автором книги "Professional CMake: A Practical Guide". Заодно хочется проинформировать, что 17 сентября он выступит с докладом "Deep CMake for Library Authors" на CppCon.
Sign up to leave a comment.
Введение в CMake