Состоялся (https://blog.kitware.com/cmake-3-13-0-available-for-download/) релиз кроссплатформенного открытого генератора сценариев сборки CMake 3.13 (http://www.cmake.org/), выступающего в качестве альтернативы Autotools и используемого в таких проектах, как KDE, LLVM/Clang, MySQL, MariaDB, ReactOS и Blender. Код CMake написан на языке C++ и распространяется под лицензией BSD.CMake примечателен предоставлением простого языка сценариев, средствами расширения функциональности через модули, минимальным числом зависимостей (нет привязки к M4, Perl или Python), поддержкой кэширования, наличием инструментов для кросс-компиляции, поддержкой генерации файлов сборки для широкого спектра систем сборки и компиляторов, наличием утилит ctest и cpack для определения сценариев тестирования и сборки пакетов, утилитой cmake-gui для интерактивной настройки параметров сборки.
Основные улучшения (https://cmake.org/cmake/help/v3.12/release/3.13.html):
- В команду 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", определяющее требования к обеспечению обратной совместимости в случаях, когда необходимо сохранение старого поведения.URL: https://blog.kitware.com/cmake-3-13-0-available-for-download/
Новость: https://www.opennet.ru/opennews/art.shtml?num=49642
Сначала программы собирали командой запускающей компилятор.
Потом стали использовать скрипты на баше - с собственным, полным по Тюрингу языком. Баш запускал компилятор.
Потом появилась утилита make, с собственным полным по Тюрингу языком. Make запускает баш, который запускает компилятор.Потом стали использовать ./configure файлы на баше(хотя поадались и на перле) которые создавали Makefile, которая запускала баш, который запускал компилятор.
CMAKE с собственным полным по Тюрингу языком, который генерит Makefile, который запускает баш, который запускал компилятор.
Вершину этого я видел в процессе сборки нативных приложений под Андроид, где Gradle, с собственным полным по Тюрингу языком, запускает Cmake, который генерит Makefile, которай запускала баш, который запускал компилятор.
Хотя погодите, специалисты рекомендуют использовать системы автоматической сборки, типа BuildCity, которая на основании скрипта на котлине, что то там про Тюринга, запускает Gradle, который ...
Ну дык "Любую проблему можно решить, добавив ещё один уровень абстракции"
А проблему "Слишком много уровней абстракции"?
> А проблему "Слишком много уровней абстракции"?Рассматриваем как "проблема? значит, уровней абстракции недостаточно." и применяем решение из п.1 !
</прогрессивненько же>
Поэтому приложение facebook на телефоне состоит из 18 000 классов и более 3 000 000 методов.Это вызывает проблемы на старых телефонах, так как размер стека вызовов больше фиксированных 5 мегабайт.
https://jaxenter.com/facebooks-completely-insane-dalvik-hack...Это приложение которое показывает картинки и текст.
В легкую, только добавлять надо не один уровень абстракции, а увеличивать их на порядок.
После того как это заработает, старый вариант уже не "слишком много". :)
Это не проблема, это решение. Нужно же как-то продавать поддержку.
Судя по вашим терадам не осилили даже инструментарий сборки
Во-первых, https://ru.wiktionary.org/wiki/%D1%82%D0%...
Кроме того, вводные слова и словосочетания (в Вашем случае - "Судя по вашим терадам") выделяются запятыми.
Во-вторых - освоил и не один.
А вот и спеллчекер подъехал
Вам повезло. Обращайтесь, пока не уехал.
Решение должно быть лучше чем проблема, иначе это лечение холеры при помощи чумы.
У CMAKE спецификация больше и сложнее чем K&R C. Даже не трогая модули.
IMHO CMAKE заточен под генерацию из IDE, а не под написание вручную.
Оставь своё имхо при себе. Для генерации xml и json есть. А тут практически свой язык https://cmake.org/cmake/help/v3.0/manual/cmake-language.7.ht...
Мало просто собрать, надо собрать в deb или rpm пакет.
Или в flatpack, а может в Appimage, еще Docker контейнер не желаете?
Тьюринг однажды проснулся и не понял, Тьюринг ли он, или машина, которую придумал Тьюринг.
Он видеокарта! Nvidia Turing
Однажды видеокарта проснулась и так родился Скайнет.
> Однажды видеокарта проснулась и так родился Скайнет.Отныне в тренде Skyfall SSC-X-9
Там для него давно уже макросов напилили. Одной строчкой делается.
> Там для него давно уже макросов напилили. Одной строчкой делается.Угу. Потому debian -- это отдельный каталог в дереве исходников. Плюс к тому, образовалась некая отдельная категория разработчиков -- "сопровождающий пакетов". В действительности даже в ebuild-ах нужны, помимо inherit, дополнительные строки.
Но намёк не на сложность. Решения проблемы dependency hell приводит к появлению всё новых и новых решений.
make install --> apt install --> docker pull
ещё bazel вспомни
Ага. Когда надо не только скомпилировать, а еще, например, из DSL код сгенерировать (protobuf, например) или из редактируемых форматов десятки/сотни/тысячи картинок сделать (из psd, svg и т.п в png и jpg), тоже будете ручками запускать? :) Или долго и нудно изобретать bash скрипты с учетом зависимостей и с инкрементальными сборками?
так это же вы сами виноваты, что наплодили всяких make, nmake, ninja, msbuild - вот и приходится для кроссплатформенности городить костыли. То ли дело одна платформочка, один Turbo Pascal, ничего лишнего, какие скрипты.
> То ли дело одна платформочка, один Turbo Pascal, ничего лишнего, какие скрипты.Уже есть Fpcmake во FreePascal - так что, там тоже не избежали этого.
Ага, msbuild - точно "мы" наплодили ;)
Грамотный заброс, но, помнится, у гугля была сборка андроид-сдк чисто на GNU Make. и даже толковые статеечки были, поясняющие их выбор. Т.е. корпорация зла содержит трезвые головы в нужном для обоснования минимализма количестве.
Мало ли что где полно по Тьюрингу, это совершенно бесполезное свойство.Шел, например, не умеет отслеживать зависимости ибо он не DSL для сборки, а кодить на нём сложную логику напряжно. make в принципе запускает компилятор сам ибо дизайнился как около декларативный DSL именно для сборки, но из-за этого на нём невозможно не через задницу накодить императивную логику без шела.
В конце концов make, как DSL для сборки, оказался куском гогна совершенно не удовлетворяющим требованиям по сборке больших проектов. Как только люди не извращались с make сценариями чтобы научить их складывать промежуточные продукты (~объектники) в сторонке от кода, собирать код условно и делать кеш зависимым от сборочного окружения (например, отличать дебажную сборку от релизной). Из-за этого появились генераторы make сценариев с накостыливаем логики на баше.
Ясное дело, что генераторы make сценариев являются промежуточным этапом развития систем сборок и во многих местах уже существуют полноценные сборочные DSL инструменты без make. Пройдёт ещё с десяток лет и все cmake подобные инструменты останутся в истории, как и сам make. Десяток лет нужен на допилку закрытых прототипов и выкидывание их в СПО.
Яйцо в утке, утка в зайце, заяц в шоке...
Хотя я не лучше: tox -> make -> setuptools (python). Вот думаю сейчас - может всё в одном tox'е реализовать?
>Make запускает баш, который запускает компилятор.Что за бред я читаю? Вы хоть раз htop запускали во время сборки?
Рецепты выполняются при помощи $(SHELL), если что.
А запускать полезней pstree(1).
> Рецепты выполняются при помощи $(SHELL), если что.
> А запускать полезней pstree(1).Спасибо. Век живи, век учись, блин :-)
> Спасибо. Век живи, век учись, блин :-)Тогда ещё пару полезняшек на те же темы, вдруг пригодятся:
- на http://cmcrossroads.com есть немало интересных штук по make, скажем, вот эту я применил в mkimage-profiles для трассировки цепочки целей: http://cmcrossroads.com/ask-mr-make/6535-tracing-rule-execut...
- не все руткиты, которые троянят ps(1), заморачиваются pstree(1) ;-)
Вот за что уважаю Rust, так это за то, что вместе с языком идет достаточная система сборки и управления зависимостями - Cargo.И не нужны эти сторонние глючные костыли в виде Make/Cmake/Automake/Ant/over 9000 переусложненных, глючных приложений, с over 9000 форматов конфигурации.
И более 9000 версий систем сборки.
Программирую под Адрющу.
Стандартная ситуевина:
- В системе установлен Gradle X версии
- В Android Studio идет с Gradle Y версии
- Проекту для сборки нужен Gradle Z версии
- Его зависимостям нужен Gradle вашумать версии.
Потому что неыиг локально билдить
"Так же, как все! В облаках, в облаках! Так же, как все!"
Ок, давайте соберем 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 llvmWhat a f...
Короче любой проект сложнее hello world потребует что-то на C/C++ и онную систему сборки.
> Вот за что уважаю Rust, так это за то, что вместе с языком идет достаточная система сборки и управления зависимостями - Cargo.вот за что разочаровался в Rust -- за то что вместе с ним идёт система сборки Cargo.
и не просто идёт -- а по сути является частью языка.
получается что отказаться от Cargo -- НЕЛЬЗЯ. нельзя заменить на что-то другое. в итоге язык сам себя подставил -- заставив программистов в обязательном порядке НЕ использовать различные системы сборки.
и не надо думать будто Cargo решило все проблемы. во первых система версионирования пакетов может не отражать реальность ("реальность" представляемую в голове Cargo). а на этом в Cargo всё держится. во вторых Rust может оказаться лишь маленькой частью другой большой программы -- и вот тут Cargo только вставляет палки в колёса, не предоставив качественной инфроструктуры которую можно было бы использовать из другой (внешней) системы сборки.
вобщем пока делали язык -- всё было хорошо. но как только ударились в систему сборки -- всё сразу напортачили.
>нельзя заменить на что-то другоеrustc - голый компилятор. Используется с любой системой сборки, хоть в Makefile-е пищи
CC = rustc
>по сути является частью языка.ложь, трындеж и провокация.
>НЕ использовать различные системы сборки.смотри выше. Гуглим CMakeRust для примера.
>получается что отказаться от Cargo -- НЕЛЬЗЯ. нельзя заменить на что-то другое. в итоге язык сам себя подставил -- заставив программистов в обязательном порядке НЕ использовать различные системы сборки.Это как раз очень хорошо. Лучше иметь одну систему сборки и один пакетный менеджер, чем держать зоопарк несовместимых друг с другом решений. Если программистов в карго что-то не устраивает, то пусть фиксят карго, а не разводят зоопарк.
> Если
> программистов в карго что-то не устраивает, то пусть фиксят карго, а
> не разводят зоопарк.А если фиксы не примут, пусть делают форк :)
Да, 2 почти неотличимых форка не выживут, останется только 1.
Доказано OpenWRT.
> Да, 2 почти неотличимых форка не выживут, останется только 1.
> Доказано OpenWRT.Бритва Оккама же.
Не доверяю системам сборки, которые сами что-то скачивают.
> минимальным числом зависимостей (нет привязки к M4, Perl или Python)Гонево! У этого CMake over9000 зависимостей, вплоть до распоследней LibC. В итоге я на своём не самом свежем линуксе этот ваш сы-манки так и не собрал, как и ту долбанную прогу, к-я его потребовала.
del
> У этого CMake over9000 зависимостей, вплоть до распоследней LibCЯ спрашивал у разрабов. Бинарные сборки, доступные на сайте, собирают в Debian 6 с Glibc 2.11
Судя по комментам все ненавидят CMake, но избавиться от него не могут. Народ, я с вами!
> Судя по комментам все ненавидят 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.
>ни уважением к традициям pkg-configОн там всегда поддерживался. Ты о чём вообще?
> Он там всегда поддерживался. Ты о чём вообще?не без проблем
Каких?
> ... Meson Build ...Спаси нас от таких друзей, а с врагами мы и сами справимся.
>Meson has two main dependencies.Python 3
NinjaИтого: чтобы собрать программу на 1 килобайт надо скачать и поставить Анаконду на 3 гига.
Киллер-фича CMake - это то, что она не лочит пользователя, ни к компилятору, ни к инструменту сборки, ни к башу, ни к цигвину. ДЛЯ НЕЁ НЕ НУЖНО УСТАНАВЛИВАТЬ НИЧЕГО, ЧТО ПОЛЬЗОВАТЕЛЮ НЕ НУЖНО, ДОСТАТОЧНО УЖЕ ТОГО, ЧТО УЖЕ ЕСТЬ. РАДИ ЭТОГО МЫ ЕЁ И ТЕРПИМ. РАДИ ТОГО, ЧТО БЫ ЗНАЕМ - ЕСЛИ МЫ ИСПОЛЬЗУЕМ CMake, ПОЛЬЗОВАТЕЛЬ НЕ СКАЖЕТ "ПОШЁЛ НА *** СО СВОЕЙ СТУДИЕЙ", "ПОШЁЛ НА *** СО СВОИМ bazelем", "ПОШЁЛ НА *** СО СВОИМ Пистоном, Рубином и Node.JS" и "ПОШЁЛ НА *** СО СВОИМ ya" (проприетарный сборочный инструмент от яндекса). Я знаю это потому, что я сам так сказал не раз. Меня реально достал этот зоопарк, когда для сборки одной библиотеки надо конкретно за*****я с установкой зависимостей, их зависисмостей и зависимостей их зависимостей.
>NinjaИ ещё собрать ниндзю, сборка которой тянет за собой пистон, если нет рабочей ниндзи, так как бинарника для i686 они не предоставляют.
Но ниндзю я собрал, благо что пистон у меня и так есть. Но если бы не был, то тогда бы у меня подгорела жопа.
> поставить Анаконду на 3 гига.что мешает вместо анаконды на 3 гига поставить чистый CPython на 20 мегабайт?
Книжку кто-то читал? https://crascit.com/professional-cmake/ Стоит своих денег?
>Стоит своих денег?Нет.
Стоит. Единственная CMake книга, которая более менее объясняет новичкам основные концепции.Ее также можно скачать на либгене.
>Ее также можно скачать на либгене.(bow)