The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз системы сборки CMake 3.13

21.11.2018 10:37

Состоялся релиз кроссплатформенного открытого генератора сценариев сборки CMake 3.13, выступающего в качестве альтернативы Autotools и используемого в таких проектах, как KDE, LLVM/Clang, MySQL, MariaDB, ReactOS и Blender. Код CMake написан на языке C++ и распространяется под лицензией BSD.

CMake примечателен предоставлением простого языка сценариев, средствами расширения функциональности через модули, минимальным числом зависимостей (нет привязки к M4, Perl или Python), поддержкой кэширования, наличием инструментов для кросс-компиляции, поддержкой генерации файлов сборки для широкого спектра систем сборки и компиляторов, наличием утилит ctest и cpack для определения сценариев тестирования и сборки пакетов, утилитой cmake-gui для интерактивной настройки параметров сборки.

Основные улучшения:

  • В команду cmake добавлены опции "-S source_dir" и "-B build_dir" для определения путей к каталогу с исходными текстами и каталогу для сборки;
  • Добавлены новые команды "target_link_directories()" и "target_link_options()" для определения каталогов, опций и местоположения библиотек, используемых в операциях компоновки;
  • Команда "target_link_libraries()" теперь может использоваться вне текущего каталога;
  • В команду "install(TARGETS)" добавлена поддержка установки целевых файлов, созданных вне текущего каталога;
  • В генератор "Green Hills MULTI" добавлена возможность выбора платформы, архитектуры и инструментария;
  • В генераторы для Visual Studio 2010 и более новых версий добавлена опция "INTERPROCEDURAL_OPTIMIZATION" и связанный с ней модуль "CheckIPOSupported" для управления применением межпроцедурных оптимизаций. Добавлены свойства "VS_DEBUGGER_COMMAND_ARGUMENTS" и "VS_DEBUGGER_ENVIRONMENT" для определения аргументов командной строки и переменных окружения для управления отладочными режимами в генераторах для Visual Studio;
  • На платформе Windows обеспечена возможность использования команды "cmake -E create_symlink";
  • В команде "option()" теперь учитывается наличие нормальных переменных с тем же именем (они теперь не переопределяются в кэше и настройках);
  • В команде "target_sources()" обработка относительных путей к исходным текстам теперь производится относительно текущего каталога с исходными текстами;
  • Добавлено правило "CMP0076", определяющее требования к обеспечению обратной совместимости в случаях, когда необходимо сохранение старого поведения.


  1. Главная ссылка к новости (https://blog.kitware.com/cmake...)
  2. OpenNews: Проект Qt прекращает разработку сборочной системы Qbs в пользу CMake
  3. OpenNews: Релиз системы сборки CMake 3.12
  4. OpenNews: Выпуск системы сборки GNU Make 4.2
  5. OpenNews: Разработчик языка XL опубликовал новую сборочную систему build
  6. OpenNews: Доступна система сборки Meson 0.42, на которую переходят systemd, GTK+ и GNOME
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/49642-cmake
Ключевые слова: cmake, make, build
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (62) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:37, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +35 +/
    Сначала программы собирали командой запускающей компилятор.
    Потом стали использовать скрипты на баше - с собственным, полным по Тюрингу языком. Баш запускал компилятор.
    Потом появилась утилита make, с собственным полным по Тюрингу языком. Make запускает баш, который запускает компилятор.

    Потом стали использовать ./configure файлы на баше(хотя поадались и на перле) которые создавали Makefile, которая запускала баш, который запускал компилятор.

    CMAKE с собственным полным по Тюрингу языком, который генерит Makefile, который запускает баш, который запускал компилятор.

    Вершину этого я видел в процессе сборки нативных приложений под Андроид, где Gradle, с собственным полным по Тюрингу языком, запускает Cmake, который генерит Makefile, которай запускала баш, который запускал компилятор.

    Хотя погодите, специалисты рекомендуют использовать системы автоматической сборки, типа BuildCity, которая на основании скрипта на котлине, что то там про Тюринга, запускает Gradle, который ...

     
     
  • 2.2, 1 (??), 11:49, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ну дык "Любую проблему можно решить, добавив ещё один уровень абстракции"
     
     
  • 3.4, Аноним (1), 11:52, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    А проблему "Слишком много уровней абстракции"?

     
     
  • 4.6, Andrey Mitrofanov (?), 12:11, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > А проблему "Слишком много уровней абстракции"?

    Рассматриваем как "проблема? значит, уровней абстракции недостаточно." и применяем решение из п.1 !
    </прогрессивненько же>

     
     
  • 5.9, Аноним (1), 12:24, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Поэтому приложение facebook на телефоне состоит из 18 000 классов и более 3 000 000 методов.

    Это вызывает проблемы на старых телефонах, так как размер стека вызовов больше фиксированных 5 мегабайт.
    https://jaxenter.com/facebooks-completely-insane-dalvik-hack-105776.html

    Это приложение которое показывает картинки и текст.

     
  • 4.15, КО (?), 13:09, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В легкую, только добавлять надо не один уровень абстракции, а увеличивать их на порядок.
    После того как это заработает, старый вариант уже не "слишком много". :)
     
  • 4.34, user (??), 18:03, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Это не проблема, это решение. Нужно же как-то продавать поддержку.
     
  • 2.7, Аноним (7), 12:22, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Судя по вашим терадам не осилили даже инструментарий сборки
     
     
  • 3.10, Аноним (10), 12:28, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Во-первых, https://ru.wiktionary.org/wiki/%D1%82%D0%B8%D1%8
    Кроме того, вводные слова и словосочетания (в Вашем случае - "Судя по вашим терадам") выделяются запятыми.
    Во-вторых - освоил и не один.
     
     
  • 4.16, Аноним (16), 13:11, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А вот и спеллчекер подъехал
     
     
  • 5.35, Аноним (35), 18:58, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вам повезло. Обращайтесь, пока не уехал.
     
  • 3.11, Аноним (1), 12:28, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Решение должно быть лучше чем проблема, иначе это лечение холеры при помощи чумы.
    У CMAKE спецификация больше и сложнее чем K&R C. Даже не трогая модули.
     
     
  • 4.32, user (??), 17:59, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    IMHO CMAKE заточен под генерацию из IDE, а не под написание вручную.
     
     
  • 5.44, Аноним (44), 23:21, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Оставь своё имхо при себе. Для генерации xml и json есть. А тут практически свой язык https://cmake.org/cmake/help/v3.0/manual/cmake-language.7.html#syntax
     
  • 2.13, Акакжев (?), 12:38, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Мало просто собрать, надо собрать в deb или rpm пакет.
     
     
  • 3.14, Аноним (1), 12:44, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Или в flatpack, а может в Appimage, еще Docker контейнер не желаете?
     
     
  • 4.17, Акакжев (?), 13:14, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Тьюринг однажды проснулся и не понял, Тьюринг ли он, или машина, которую придумал Тьюринг.
     
     
  • 5.21, Аноним (1), 13:43, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Он видеокарта! Nvidia Turing
     
     
  • 6.37, Аноним (37), 19:47, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Однажды видеокарта проснулась и так родился Скайнет.
     
     
  • 7.54, Акакжев (?), 15:08, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Однажды видеокарта проснулась и так родился Скайнет.

    Отныне в тренде Skyfall SSC-X-9

     
  • 3.46, Аноним (44), 00:19, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Там для него давно уже макросов напилили. Одной строчкой делается.
     
     
  • 4.49, Акакжев (?), 08:09, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Там для него давно уже макросов напилили. Одной строчкой делается.

    Угу. Потому debian -- это отдельный каталог в дереве исходников. Плюс к тому, образовалась некая отдельная категория разработчиков -- "сопровождающий пакетов". В действительности даже в ebuild-ах нужны, помимо inherit, дополнительные строки.

    Но намёк не на сложность. Решения проблемы dependency hell приводит к появлению всё новых и новых решений.

    make install --> apt install --> docker pull

     
  • 2.18, Аноним (18), 13:14, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ещё bazel вспомни
     
  • 2.20, Аноним (20), 13:25, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ага. Когда надо не только скомпилировать, а еще, например, из DSL код сгенерировать (protobuf, например) или из редактируемых форматов десятки/сотни/тысячи картинок сделать (из psd, svg и т.п в png и jpg), тоже будете ручками запускать? :) Или долго и нудно изобретать bash скрипты с учетом зависимостей и с инкрементальными сборками?
     
  • 2.23, Аноним (23), 13:46, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    так это же вы сами виноваты, что наплодили всяких make, nmake, ninja, msbuild - вот и приходится для кроссплатформенности городить костыли. То ли дело одна платформочка, один Turbo Pascal, ничего лишнего, какие скрипты.
     
     
  • 3.48, немезидеЦ (?), 07:48, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > То ли дело одна платформочка, один Turbo Pascal, ничего лишнего, какие скрипты.

    Уже есть Fpcmake во FreePascal - так что, там тоже не избежали этого.

     
  • 3.51, Аноним (51), 12:26, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, msbuild - точно "мы" наплодили ;)
     
  • 2.24, твой лучший друг (?), 14:29, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Грамотный заброс, но, помнится, у гугля была сборка андроид-сдк чисто на GNU Make. и даже толковые статеечки были, поясняющие их выбор.  Т.е. корпорация зла содержит трезвые головы в нужном для обоснования минимализма количестве.
     
  • 2.45, all_glory_to_the_hypnotoad (ok), 23:59, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Мало ли что где полно по Тьюрингу, это совершенно бесполезное свойство.

    Шел, например, не умеет отслеживать зависимости ибо он не DSL для сборки, а кодить на нём сложную логику напряжно. make в принципе запускает компилятор сам ибо дизайнился как около декларативный DSL именно для сборки, но из-за этого на нём невозможно не через задницу накодить императивную логику без шела.

    В конце концов make, как DSL для сборки, оказался куском гогна совершенно не удовлетворяющим требованиям по сборке больших проектов. Как только люди не извращались с make сценариями чтобы научить их складывать промежуточные продукты (~объектники) в сторонке от кода, собирать код условно и делать кеш зависимым от сборочного окружения (например, отличать дебажную сборку от релизной). Из-за этого появились генераторы make сценариев с накостыливаем логики на баше.

    Ясное дело, что генераторы make сценариев являются промежуточным этапом развития систем сборок и во многих местах уже существуют полноценные сборочные DSL инструменты без make. Пройдёт ещё с десяток лет и все cmake подобные инструменты останутся в истории, как и сам make. Десяток лет нужен на допилку закрытых прототипов и выкидывание их в СПО.

     
  • 2.47, vstconsulting (ok), 01:50, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Яйцо в утке, утка в зайце, заяц в шоке...
    Хотя я не лучше: tox -> make -> setuptools (python). Вот думаю сейчас - может всё в одном tox'е реализовать?
     
  • 2.52, Школьник (ok), 13:25, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >Make запускает баш, который запускает компилятор.

    Что за бред я читаю? Вы хоть раз htop запускали во время сборки?

     
     
  • 3.61, Michael Shigorin (ok), 01:41, 25/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Рецепты выполняются при помощи $(SHELL), если что.
    А запускать полезней pstree(1).
     
     
  • 4.63, Школьник (ok), 15:43, 26/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Рецепты выполняются при помощи $(SHELL), если что.
    > А запускать полезней pstree(1).

    Спасибо. Век живи, век учись, блин :-)

     
     
  • 5.64, Michael Shigorin (ok), 17:28, 26/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Спасибо. Век живи, век учись, блин :-)

    Тогда ещё пару полезняшек на те же темы, вдруг пригодятся:

    - на http://cmcrossroads.com есть немало интересных штук по make, скажем, вот эту я применил в mkimage-profiles для трассировки цепочки целей: http://cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make

    - не все руткиты, которые троянят ps(1), заморачиваются pstree(1) ;-)

     

  • 1.3, Аноним (1), 11:49, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Вот за что уважаю Rust, так это за то, что вместе с языком идет достаточная система сборки и управления зависимостями - Cargo.

    И не нужны эти сторонние глючные костыли в виде Make/Cmake/Automake/Ant/over 9000 переусложненных, глючных приложений, с over 9000 форматов конфигурации.

     
     
  • 2.5, Аноним (1), 12:03, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    И более 9000 версий систем сборки.
    Программирую под Адрющу.
    Стандартная ситуевина:
    - В системе установлен Gradle X версии
    - В Android Studio идет с Gradle Y версии
    - Проекту для сборки нужен Gradle Z версии
    - Его зависимостям нужен Gradle вашумать версии.
     
     
  • 3.8, Аноним (7), 12:24, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Потому что неыиг локально билдить
     
     
  • 4.12, Аноним (10), 12:33, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    "Так же, как все! В облаках, в облаках! Так же, как все!"
     
  • 2.19, Аноним (19), 13:19, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ок, давайте соберем servo на расте:
    > Servo is built with Cargo, the Rust package manager. We also use Mozilla's Mach tools to orchestrate the build and other tasks.

    ну, ладно, допустим.

    > export CMAKE=cmake3
    > brew install automake autoconf@2.13 pkg-config python cmake yasm llvm

    What a f...

    Короче любой проект сложнее hello world потребует что-то на C/C++ и онную систему сборки.

     
  • 2.26, X4asd (ok), 14:36, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Вот за что уважаю Rust, так это за то, что вместе с языком идет достаточная система сборки и управления зависимостями - Cargo.

    вот за что разочаровался в Rust -- за то что вместе с ним идёт система сборки Cargo.

    и не просто идёт -- а по сути является частью языка.

    получается что отказаться от Cargo -- НЕЛЬЗЯ. нельзя заменить на что-то другое. в итоге язык сам себя подставил -- заставив программистов в обязательном порядке НЕ использовать различные системы сборки.

    и не надо думать будто Cargo решило все проблемы. во первых система версионирования пакетов может не отражать реальность ("реальность" представляемую в голове Cargo). а на этом в Cargo всё держится. во вторых Rust может оказаться лишь маленькой частью другой большой программы -- и вот тут Cargo только вставляет палки в колёса, не предоставив качественной инфроструктуры которую можно было бы использовать из другой (внешней) системы сборки.

    вобщем пока делали язык -- всё было хорошо. но как только ударились в систему сборки -- всё сразу напортачили.

     
     
  • 3.28, Аноним (1), 15:17, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >нельзя заменить на что-то другое

    rustc - голый компилятор. Используется с любой системой сборки, хоть в Makefile-е пищи


    CC = rustc


    >по сути является частью языка.

    ложь, трындеж и провокация.
    >НЕ использовать различные системы сборки.

    смотри выше. Гуглим CMakeRust для примера.

     
  • 3.40, Аноним (40), 22:42, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >получается что отказаться от Cargo -- НЕЛЬЗЯ. нельзя заменить на что-то другое. в итоге язык сам себя подставил -- заставив программистов в обязательном порядке НЕ использовать различные системы сборки.

    Это как раз очень хорошо. Лучше иметь одну систему сборки и один пакетный менеджер, чем держать зоопарк несовместимых друг с другом решений. Если программистов в карго что-то не устраивает, то пусть фиксят карго, а не разводят зоопарк.

     
     
  • 4.50, Акакжев (?), 08:12, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Если
    > программистов в карго что-то не устраивает, то пусть фиксят карго, а
    > не разводят зоопарк.

    А если фиксы не примут, пусть делают форк :)

     
     
  • 5.57, Аноним (40), 00:48, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Да, 2 почти неотличимых форка не выживут, останется только 1.
    Доказано OpenWRT.
     
     
  • 6.59, Акакжев (?), 06:44, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Да, 2 почти неотличимых форка не выживут, останется только 1.
    > Доказано OpenWRT.

    Бритва Оккама же.

     
  • 2.33, user (??), 18:01, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Не доверяю системам сборки, которые сами что-то скачивают.
     

  • 1.22, Юзер (??), 13:43, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > минимальным числом зависимостей (нет привязки к M4, Perl или Python)

    Гонево! У этого CMake over9000 зависимостей, вплоть до распоследней LibC. В итоге я на своём не самом свежем линуксе этот ваш сы-манки так и не собрал, как и ту долбанную прогу, к-я его потребовала.

     
     
  • 2.29, kravich (ok), 15:19, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    del
     
  • 2.39, Аноним (39), 21:39, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > У этого CMake over9000 зависимостей, вплоть до распоследней LibC

    Я спрашивал у разрабов. Бинарные сборки, доступные на сайте, собирают в Debian 6 с Glibc 2.11

     

  • 1.25, FedeX (ok), 14:35, 21/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Судя по комментам все ненавидят CMake, но избавиться от него не могут. Народ, я с вами!
     
     
  • 2.27, X4asd (ok), 14:43, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Судя по комментам все ненавидят CMake, но избавиться от него не могут. Народ, я с вами!

    ну потому что форум про Linux.

    а CMake ну уж совсем не похож на Linux-программы. ни синтаксисом ключей. ни уважением к традициям pkg-config ..

    ды и вообще CMake щаз пользуется популярностью в MS Windows и OS X -- в хипсторских C++ программах (не путать с православным C). а на GNU/Linux оно не так уж и популярно, как впрочем и сам C++.

    победная эстафета в GNU/Linux перехватывается сейчас Meson Build .. ну а CMake продолжает набирать популярность в MS Windows и OS X.

     
     
  • 3.30, Аноним (44), 16:07, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >ни уважением к традициям pkg-config

    Он там всегда поддерживался. Ты о чём вообще?

     
     
  • 4.36, Аноним (36), 19:04, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Он там всегда поддерживался. Ты о чём вообще?

    не без проблем

     
     
  • 5.43, Аноним (44), 23:18, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Каких?
     
  • 3.31, yet another anonymous (?), 17:43, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > ... Meson Build ...

    Спаси нас от таких друзей, а с врагами мы и сами справимся.

     
  • 3.41, Аноним (40), 22:58, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Python 3 Ninja Итого чтобы собрать программу на 1 килобайт надо скачать... большой текст свёрнут, показать
     
     
  • 4.42, Аноним (40), 23:01, 21/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Ninja

    И ещё собрать ниндзю, сборка которой тянет за собой пистон, если нет рабочей ниндзи, так как бинарника для i686 они не предоставляют.

    Но ниндзю я собрал, благо что пистон у меня и так есть. Но если бы не был, то тогда бы у меня подгорела жопа.

     
  • 4.53, Аноним (53), 13:34, 22/11/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > поставить Анаконду на 3 гига.

    что мешает вместо анаконды на 3 гига поставить чистый CPython на 20 мегабайт?

     

  • 1.56, Ложечка (?), 20:09, 22/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Книжку кто-то читал? https://crascit.com/professional-cmake/ Стоит своих денег?
     
     
  • 2.58, Аноним (40), 00:52, 23/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >Стоит своих денег?

    Нет.

     
  • 2.60, l2y (?), 21:10, 24/11/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Стоит. Единственная CMake книга, которая более менее объясняет новичкам основные концепции.

    Ее также можно скачать на либгене.

     

  • 1.62, Ложечка (?), 11:37, 25/11/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Ее также можно скачать на либгене.

    (bow)

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру