LINUX.ORG.RU
ФорумTalks

безмэйковость

 , ,


0

1

1. Принцип make - собирается только то, зависимости(исходники) чего были изменены.
2. Для того, чтобы что-нибудь собрать, нужно сделать вызовы программ-собирателей, такие вызовы записываются в каком-то синтаксисе, например bash
3. Проверка изменённости тоже может быть описана при помощи bash что-то вроде

if [ "$(( $(stat -c "%Y" $srcfile) - $(stat -c "%Y" $dstfile) ))" -gt "0" ]; then
   echo "$srcfile is newer then $dstfile"
fi
4. отсюда следует, что можно скомпилировать make-скрипт в bash-скрипт.
5. Если можно скомпилирвоать в bash, то можно и в другие языки (например C, но это неважно в этом топике)
6. Когда чего-то много, образуется фреймворк (по аналогии с llvm). Т.е. разные бэкенды, во что преобразовать и общая для всех них инфраструктура.

Зачем ненужен make? Ну, например, если есть ebuild, то у него базовый язык bash, а не make

Проверка изменённости тоже может быть описана при помощи bash что-то вроде

-ot, -nt

d_a ★★★★★
()

Makefile имеет декларативный синтаксис, а bash — процедурный. Описывать зависимости удобно именно декларативно.

/thread

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

поэтому bsd-разработчики молодцы, а гентушники - нет

/thread

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

Зачем грепать исходники? Достаточно запустить cmake, там отличная справка

Generators
  Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files.
                                 Optional [arch] can be "Win64" or "IA64".
  Visual Studio 9 2008 [arch]  = Generates Visual Studio 2008 project files.
                                 Optional [arch] can be "Win64" or "IA64".
  Visual Studio 8 2005 [arch]  = Deprecated.  Generates Visual Studio 2005
                                 project files.  Optional [arch] can be
                                 "Win64".
  Borland Makefiles            = Generates Borland makefiles.
  NMake Makefiles              = Generates NMake makefiles.
  NMake Makefiles JOM          = Generates JOM makefiles.
  Green Hills MULTI            = Generates Green Hills MULTI files
                                 (experimental, work-in-progress).
  MSYS Makefiles               = Generates MSYS makefiles.
  MinGW Makefiles              = Generates a make file for use with
                                 mingw32-make.
  Unix Makefiles               = Generates standard UNIX makefiles.
  Ninja                        = Generates build.ninja files.
  Watcom WMake                 = Generates Watcom WMake makefiles.
  CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files.
  CodeBlocks - NMake Makefiles = Generates CodeBlocks project files.
  CodeBlocks - NMake Makefiles JOM
                               = Generates CodeBlocks project files.
  CodeBlocks - Ninja           = Generates CodeBlocks project files.
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files.
  CodeLite - MinGW Makefiles   = Generates CodeLite project files.
  CodeLite - NMake Makefiles   = Generates CodeLite project files.
  CodeLite - Ninja             = Generates CodeLite project files.
  CodeLite - Unix Makefiles    = Generates CodeLite project files.
  Sublime Text 2 - MinGW Makefiles
                               = Generates Sublime Text 2 project files.
  Sublime Text 2 - NMake Makefiles
                               = Generates Sublime Text 2 project files.
  Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files.
  Sublime Text 2 - Unix Makefiles
                               = Generates Sublime Text 2 project files.
  Kate - MinGW Makefiles       = Generates Kate project files.
  Kate - NMake Makefiles       = Generates Kate project files.
  Kate - Ninja                 = Generates Kate project files.
  Kate - Unix Makefiles        = Generates Kate project files.
  Eclipse CDT4 - NMake Makefiles
                               = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - MinGW Makefiles
                               = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.

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

Ну я просто не мог проверить: писал с телефона)

DELIRIUM ☆☆☆☆☆
()

Ну поначалу мейк каким-то таким скриптцом и был, в чём проблема?

Bfgeshka ★★★★★
()

Как ты думаешь, зачем куча инструментов _генерирует_ makefile'ы? казалось бы - если ты знаешь как его создать и всё, что нужно запустить - запускай сам?

внезапно, make ещё строит дерево зависимостей и умеет параллельный запуск с учётом этого знания и умеет инкрементально собирать, а ещё make'у безралично, что именно собирать - функционал его не привязан к конкретному языку.

ну и любое решение для сборочной системы зависит от масштаба: собрать проект из 2 файлов можно и скриптом, а на размерах и говнокоде андроида даже make'у становится плохо, и там начинаются совсем другие танцы.

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