LINUX.ORG.RU

CMake 3.28

 , , , ,

CMake 3.28

1

3

6 декабря состоялся выпуск 3.28 кроссплатформенной системы сборки CMake, написанной на языке C++ и распространяемой по лицензии BSD-3.

Список основных изменений:

  • улучшена поддержка модулей C++20 в генераторах Ninja и Visual Studio (VS 2022 и новее). Подробности в cmake-cxxmodules(7);
  • код языка HIP для GPU NVIDIA теперь может быть скомпилирован компилятором nvcc (NVIDIA CUDA Compiler). Подробности в описании переменной CMAKE_HIP_PLATFORM;
  • удалена команда exec_program(), признанная устаревшей в CMake 3.0. Вместо неё следует использовать execute_process();
  • сгенерированные файлы в целях, использующих наборы файлов, теперь по умолчанию считаются приватными. Генерируемые публичные заголовочные файлы должны быть указаны с помощью наборов файлов. Это позволяет создавать более эффективные графы сборки для Ninja. Подробности в политике CMP0154;
  • команды find_library(), find_path() и find_file() больше не ищут в префиксах установки, полученных из переменной окружения PATH. Это поведение было добавлено в CMake 3.3 для поддержки сред разработки MSYS и MinGW («MSYSTEM») в Windows и могло искать нежелательные префиксы, которые случайно оказались в PATH по каким-либо причинам.
  • добавлена поддержка директорий .xcframework для платформ Apple.

>>> Полный список изменений

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 1)

Ответ на: комментарий от anonmyous

что апстрим разделил либу на 2, и надо теперь с обеими линковаться? При чём, нормальный человек бы даже не заметил, ведь соответствующее изменение прилетело и в её .pc-файл тоже.

Делить либу на две чтобы потом обратно её собрать в одну pc-единицу - какое-то сомнительное действие. Ну да ладно, я всё равно уже написал как pkgconf использовать без блоатварных сборщиков.

А как на счёт опциональных зависимостей?

make вполне поддерживает приём аргументов, влияющих на процесс сборки.

в каком префиксе искать будете?

Искать будет компилятор, там же где и ищет при сборке. gcc -print-search-dirs Вручную никакие списки префиксов хардкодить не нужно, и их намного больше чем ты предложил.

Мезоном пользуйтесь, 21 век на дворе.

Ставить питон чтоб потом собирать проги на Си это бред.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Ставить питон чтоб потом собирать проги на Си это бред.

Не такой уж и бред. Почти на каждой *nix-like системе Python хоть какой-то версии уже установлен. На Windows его можно установить хоть с оффсайта, хоть с их недорепозитория/аппстора.

Этим и понравился waf. Работает он вплоть со самых старых легаси версий по самые современные. И ещё чтобы не делать pip install, который кстати опасно делать в Linux дистрибутивах, так как он (аналогично make install какой-то рандомной программы) превращает систему в Slackware, а venv на каждый чих создавать – это такое. =/

a1ba
()
Последнее исправление: a1ba (всего исправлений: 1)
Ответ на: комментарий от anonmyous

Хм! Не слышал о таком, спасибо за наводку.

a1ba
()
Ответ на: комментарий от a1ba

pip install

В арче с недавнего времени это не работает. Pip ругается, что ты превращаешь систему в слаку и вместо этого нужно использовать venv. Я пока что отключаю это новое поведение через ключ ибо мне лень разбираться в питоновском мирке. Пусть будет слака.

ox55ff ★★★★★
()
Ответ на: комментарий от firkax

Ну да ладно, я всё равно уже написал как pkgconf использовать без блоатварных сборщиков.

Привожу цитату: «Ну ладно, если без pkgconf тебе никак - можно его запустить пару раз перед сборкой хоть бы шелл-скриптом (сгенерировать переменные окружения для мейка) и дальше никаких проблем.» - то есть, мы руками, на основе пкгконфига, генерим Makefile.conf? А потом ещё вы ифдефами предлагали обкладываться, то есть и config.h мы тоже генерим, верно? Ну, видимо, лет 40 назад автотулзы примерно так и зарождались. :)

make вполне поддерживает приём аргументов, влияющих на процесс сборки.

Ага, только передавать их должен юзер сам, непонятно откуда взяв? А то, что система сборки сама могла бы отключить недоступный функционал - ну, это тока для буржуев. :)

Искать будет компилятор, там же где и ищет при сборке.

Так вы ж сами предлагали, перед сборкой, всё ж скриптиком поискать что-нибудь, хотя бы хедера… А теперь снова компилятор? :)

Ставить питон чтоб потом собирать проги на Си это бред.

Ну вот народ нашёл какой-то muon-meson, который пистона не требует. Правда и функционал последних мезонов он не даёт.

anonmyous
()
Ответ на: комментарий от anonmyous

Ну, видимо, лет 40 назад автотулзы примерно так и зарождались.

Возможно, но то было 40 лет назад. Тогда они может даже хорошим инструментом были. Но наслоения невыкидываемых легаси и потом наслоения мусорного кода для управления слоями мусорного легаси похоронили под собой возможную пользу. Ещё свой вклад внесло наркоманское m4 в основе - его никто не понимает и тупо копипастит у соседа, вместе с кучами ненужных действий.

Ага, только передавать их должен юзер сам, непонятно откуда взяв? А то, что система сборки сама могла бы отключить недоступный функционал - ну, это тока для буржуев. :)

Всмысле «сама отключить»? Это что за самодеятельность? Нет, «система сборки» должна спросить у юзера что ему нужно из фич, а потом уже на основе ответов выбрать зависимости. «Спросить что нужно» можно как раз через аргументы make. Если хочешь, можно интерактивный скрипт-конфигуратор для них сделать, такой есть в freebsd портах например - расставляешь галочки а потом по итогам генерится командная строка запуска сборки (кстати там никаких ни автотулзов ни тем более cmake не используется, всё через Makefile + спец утилита для рисования галочек - и работает намного быстрее перечисленной блоатвари).

Поведение «просто отключим то к чему нет либ» я видел у wine (во времена около версий 1.4, позже не интересовался) и оно весьма раздражало - приходилось ловить эти варнинги в логе чтоб вовремя понять каких либ не хватает, иначе придётся потом всё пересобирать.

Так вы ж сами предлагали, перед сборкой, всё ж скриптиком поискать что-нибудь, хотя бы хедера… А теперь снова компилятор? :)

Варианта два:

1) спрашиваем у gcc список путей к инклюдам и библиотекам, и ищем по ним сами

2) запускаем команду типа gcc dummy.c -lsomename и смотрим код возврата (да, похоже на автотулзы опять)

Ну вот народ нашёл какой-то muon-meson, который пистона не требует.

Замену meson на muon одобряю. Но на мой взгляд с этим всем с самого начала не надо было связываться.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Ещё свой вклад внесло наркоманское m4 в основе

Не буду комментировать м4 именно как основу автотулзов, но вот как препроцессор общего назначения - это мощная штука. На нём можно накодить практически всё, что угодно, но, при этом, он остаётся именно препроцессором. Альтернатив ему, среди препроцессоров, я не знаю.

Всмысле «сама отключить»? Это что за самодеятельность?

Как автор заложит, так она и сделает. Самодеятельности тут нет.

Нет, «система сборки» должна спросить у юзера что ему нужно из фич

Разумеется, если автор решит, что по этой фиче она должна спросить, а по вон той - можно и не спрашивать, то всё так и будет.

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

Да нет, спасибо, я уж как-нить готовым воспользуюсь. :)

и оно весьма раздражало

Современные системы сборки выводят статистику в конце. Это нашли, это не нашли, это отключили, то включили. Юзер может туда глянуть, и решить: собирать уже, или добавить зависимостей и переконфигурить.

Варианта два:

Да нет, не 2. :) Ещё - «использовать систему сборки» есть вариант. А вот писать скриптами свою - это как раз НЕ вариант.

Замену meson на muon одобряю.

А я нет. Он никогда не будет все возможности мезона поддерживать, всегда будет догоняющим. Потом его разрабам надоест делать пустую работу, чтобы только догнать основной мезон, и они на это забьют. Так как вкладывать в проект приличные усилия, при условии, что ничего нового и интересного ты не делаешь, а вынужден только за кем-то другим повторять - это сильно демотивирует, и долго они так не протянут.

anonmyous
()
Ответ на: комментарий от firkax

…наркоманское m4… …его никто не понимает…

Ну вот не надо. Наркоманский — это язык CMake; m4 — это верх простоты. Не понимают его те, кто не удосужился хотя бы раз заглянуть в мануал. Ну, или те, кто заглянул, и, как в известном анекдоте, угадал все буквы, но не смог прочитать слово.

debugger ★★★★★
()
Ответ на: комментарий от debugger

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

Я думаю, он имел в виду, «не понимают, зачем было писать на нём автотулзы». Как препроцессор, я его использую. Но когда я смотрю на автотулзы, то не особо понимаю, почему их надо было обязательно делать на препроцессоре. :)

anonmyous
()
Ответ на: комментарий от anonmyous

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

Все непонимальщики, включая тебя, никогда не пытались читать мануалы от начала и до конца, хотя бы по диагонали.

Взять хотя бы вот этот аспект: Сборка на некоторой платформе с помощью CMake предполагает, что на этой платформе уже есть CMake. Сборка с помощью meson предполагает, что на платформе есть питон и ниндзя.

Сборка на некоторой платформе с помощью гнушных автотулзов не предполагает, что на этой платформе есть гнушные автотулзы. Нужен какой-то Bourne-совместимый шелл и какой-то make. Не требуется именно гнушный шелл (баш), не требуется именно гнушный мейк, не требуется m4 (ни гнушный, ни любой другой), на котором, как ты говоришь, автотулзы написаны.

У тебя есть идеи, как можно сделать билдовую систему с такими требованиями? Подумай об этом. А мужики (я имею ввиду авторов автотулзов) на этом собаку съели: у них есть не только идеи, но и работающая реализация.

Если почитать ман, становится ясно какие цели стояли перед этим проектом и почему они получились именно такими.

debugger ★★★★★
()
Ответ на: комментарий от debugger

Сборка на некоторой платформе с помощью гнушных автотулзов не предполагает, что на этой платформе есть гнушные автотулзы.

Это при условии, что проект тащит с собой сгенерённый конфигуре-скрипт на пару сотен килобайт, и плюс ещё кучу вспомогательных скриптов, типа config.guess, install-sh и тд. А так давно уже никто не делает. Все оставляют autogen.sh, но тогда - требуется и автоконф, и автомейк, и либтул.

anonmyous
()
Ответ на: комментарий от anonmyous

А так давно уже никто не делает.

Вот только не надо безосновательных обобщений.

debugger ★★★★★
()
Ответ на: комментарий от anonmyous

А так давно уже никто не делает. Все оставляют autogen.sh

У меня ровно обратная информация. Впрочем наличие мегабайтного configure совсем не радует.

firkax ★★★★★
()
Ответ на: комментарий от anonmyous

А так давно уже никто не делает

Ещё как делают. Configure-скрипт готовый раза в два чаще встречается, чем autogen.sh

pihter ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.