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)

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

Этакий build.cpp.

И тут я такой врываюсь весь в белом на белом коне.

UPD. Поскольку пример по ссылке – убожество без хелперов, вот так выглядит cakefile.cpp одной из моих библиотечек. Make-правила генерятся хелперами, причём одновременно и для debug, и для release (соответственно, компиляция и тестирование debug и release версий выполняется параллельно); make-like двигло вызывается подпрограммой. На голом make вы запаритесь писать произвольную логику, про всякую сабжевую дрянь вообще молчу.

Так что идеологически я полностью согласен с @firkax: make как концепция – идеален. А технически, всё что поверх него клепают, включая сабж, – собственно концепции make-правил ортогонально, всё это лишь попытки упростить генерацию правил. Но почему-то идут по пути кастомных ДЕКЛАРАТИВНЫХ языков. С соответствующим неизменным результатом.

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 5)
Ответ на: комментарий от dimgel

UPD. Поскольку пример по ссылке – убожество без хелперов, вот так выглядит cakefile.cpp одной из моих библиотечек.

Прикольно! А что понимается под хелперами? Это вспомогательные крестофункции, которые создают более сложные правила сборки под конкретные задачи (типа компила С++ проектов) через голый Make-like v.rule()? Берутся они из сошек вроде dimgel-svlen1[-DEBUG].so, dimgel-zs1-buildtime[-DEBUG].so?

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

А что понимается под хелперами? Это вспомогательные крестофункции […] через голый Make-like v.rule()?

Да, всё так. rCompile(), rLink*() – в самом <cake/aux.h>, а svlen1 и zs1 – это отдельные проекты, трансформаторы кода на clang libtooling.

	US<R> rrCompile(Oven& v, DirMaker& dm, const rrCompile_Params& pp) {
		US<R> objs;
		if (!pp.cpps.empty()) {
			objs.reserve(pp.cpps.size());
			for (auto& cpp : pp.cpps) {
				auto srcPfx    = pp.srcPfx   .ends_with('/') ? pp.srcPfx    : pp.srcPfx    + '/';
				auto targetPfx = pp.targetPfx.ends_with('/') ? pp.targetPfx : pp.targetPfx + '/';
				auto o = util::fs::changePrefixAndExt(srcPfx, targetPfx, cpp, "o");
				auto d = util::fs::changeExt(o, "d");
				objs += v.rule(o, parseDFile(v, {.cpp = cpp, .d = d, .o = o}) + pp.morePrereqs, {
					// ATTENTION: `o` is passed by value.
					{[&v, &dm, o] {
						if (v.verbose(Verbosity_Default)) {
							v.getLog().compile("%s", o.c_str());
						}
						dm.mkdirRecursive(util::fs::getParentDir(o));
					}},
					pp.cc + V<S>{"-o", o, cpp}
				});
			}
		}
		return objs;
	}

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

А где этот Cake можно скачать (в смысле исходный код)?

А нигде. Я в опен-сорц уже наигрался.

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