Pull to refresh

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, это экономит кучу времени.
UFO just landed and posted this here
1. Заведено 4 CMakeLists.txt — 3 подпроекта: движок и логика в виде библиотек, лаунчер. Все это объедятся одним родительским проектом.

2. Личные предпочтения. Возможно, я тоже предпочту XML, если вы мне подскажете хороший инструментарий.

3. Начальство бывает разное, некоторое и код иногда просматривает, а некоторое и само свои проекты имеет.
простой и понятный синтаксис;


Поделили на ноль. Куча неочевидных конструкций, сплошные макросы с непонятной областью видимости, загрязнение глобальной области видимости. Идиотский синтаксис условных выражений и придурковатый способ поиска зависимостей.
В итоге написал пару более менее декларативных оберток над этим ужасом, но с каждым днем все больше хочется от него избавится!
github.com/gorthauer/cmake-utils

Я уже молчу про чудовищно тормозную компиляцию на windows'е. Просто ни в какие ворота не лезет, qbs на том же самом коде в 10 раз быстрее справляется!
Имея лишь начальные знания английского языка, любое ключевое слово не остается для меня загадкой.
Все функции имеют более или менее унифицированный способ вызова — на первом месте всегда стоит объект, подвергающийся обработке. Разное количество параметров — уж извините, для разных действий необходимы различные параметры.

Поддержка чужих CMakeLists.txt сходна с поддержкой любого кода: превосходный код — незамысловатая поддержка, индусский код — тихий ужас.

Тормозная компиляция это проблема не CMake. Она ничего сама не компилирует.

За ссылку спасибо.
Там где можно было бы написать одну строку,

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, но таким образом я отгородил себя от ошибок на стадии сборки. Не забывайте, статья все-таки для новичков.
И да, ваш пример красив, есть куда расти.
Я думаю, автор комментария в первом примере привел текст для qmake.
UFO just landed and posted this here
Два дня, две отличных статьи по CMake. Спасибо.
Всегда пожалуйста. Не было статей, не было. А тут что-то двоих сразу пропёрло.
Мне чем CMake приглянулся, так это тем, что позволяет собирать проекты не только для ПК, но и для микроконтроллеров (в принципе разницы нет). Например для STM32. Я уже приспособил Sublime Text 2 для этого дела, а системой сборки как раз выбрал Cmake, благо была статья одного товарища, где он всё немного пояснил по этому поводу.
Но полного понимания работы пока нет. А такие статьи, как ваша, очень помогают в этом.
Ну CMake в этом плане довольно гибкое средство. Можно вообще LLVM прикрутить и будет вам счастье. Он не привязан к конкретному набору компиляторов, хоть по умолчанию и GNU набор использует.
Если проект на C++ и активно используется Boost, то почему бы не использовать Boost-Jam (bjam, b2), странно что этот топик тут не освещён совсем.
Ну из буста в нашем проекте используются лишь нити, поэтому я бы не назвал его «активно использующий буст».
И да, топик про 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.

Articles