LINUX.ORG.RU

как вы компилите многокомпонентный проект?


0

5

я использую либо уродливый makefile с детальным описанием всего, либо несколько makefile по одному на компонент, либо скрипт.

скрипт не дает человеческую параллельность сборки, множество makefile неудобно, один makefile уродлив потому что в нем описание всех компонентов.

что хотелось бы: описание компонентов и их зависимостей в одном файле. либо чем-то парсить его и получать makefile либо вообще использовать какую то другую систему сборки, не make.

что используете вы? насколько это распространено?

★★★★

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

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

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

То есть у тебя даже не хватило ума просто заглянуть в документацию?

у меня ее нет. где она хранится я тож не знаю. вбил cmake FIND_LIBRARY в гугл, и на первой странице выдачи документации не оказалось

cmake --help
.....
  --help-command cmd [file]   = Print help for a single command and exit.
  --help-command-list [file]  = List available listfile commands and exit.
  --help-commands [file]      = Print help for all commands and exit.
  --help-compatcommands [file]= Print help for compatibility commands.
  --help-module module [file] = Print help for a single module and exit.
  --help-module-list [file]   = List available modules and exit.
  --help-modules [file]       = Print help for all modules and exit.
  --help-custom-modules [file]= Print help for all custom modules and exit.
  --help-policy cmp [file]    = Print help for a single policy and exit.
  --help-policies [file]      = Print help for all policies and exit.
  --help-property prop [file] = Print help for a single property and exit.
  --help-property-list [file] = List available properties and exit.
  --help-properties [file]    = Print help for all properties and exit.
  --help-variable var [file]  = Print help for a single variable and exit.
  --help-variable-list [file] = List documented variables and exit.
  --help-variables [file]     = Print help for all variables and exit.
  --copyright [file]          = Print the CMake copyright and exit.
  --help,-help,-usage,-h,-H,/?= Print usage information and exit.
  --help-full [file]          = Print full help and exit.
  --help-html [file]          = Print full help in HTML format.
  --help-man [file]           = Print full help as a UNIX man page and exit.
.....

и зачем лезть в гугл? и самое главное почем именно в гугл, не на cmake.org - где есть все доки?

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

А незначительна эта проблема потому, что обычно сгенерированные исходники оформляются в статическую библиотеку

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

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

Я о таком извращении и не говорил. Если они оформляются в статическую библиотеку, то, естественно, зависимости указываются от этой библиотеки.

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

cmake --help

спасибо, пригодится :)

и зачем лезть в гугл? и самое главное почем именно в гугл, не на cmake.org - где есть все доки?

по привычке.

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

CMAKE_PREFIX_PATH

спасибо, действительно интересная штука.

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

У нас это не сделано в виде библиотеки, так как сгенеренные файлы используются совсем по разному. Например, они могут входить в модуль NGINX или в отдельное приложение. А там даже коды ошибок разные.

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

еще один недостаток cmake — это отсутствие стадии configure. т.е. проверять наличие и корректность зависимостей он не умеет.

Посмотри на VTK. Количество зависимостей и вариантов сборки (начиная с выбора 4 или 5 Qt, поддержки различных MPI) более чем достаточно и они контролируются.

синтаксис один из самых уродских, что я только встречал.

Тут пожалуй да, если что-то более менее сложное делаешь. Для простых задач наоборот.

гибкость ниже среднего.

Не сказал бы. Наоборот лучше, что бы кто-то один вел линию партии в CMakeLists.

AlexVR ★★★★★
()

А будет хоть один аргумент почему синтаксис cmake уродский? Названия команд кристально ясные и по ним без чтения документации понятно что они делают (в отличие от тех же AC_*), скобки такие же как везде (и в тех же autotools и в shell и в питоне и в C) - FUNC(), обращения к переменным такие же как везде (и в тех же autotools и в shell и в make) - ${VAR}. Из разницы вспоминается только необходимость указывать условие из IF в ELSE/ENDIF, так это во-первых, опционально (читайте доки), во-вторых - замечательная фича посколько понятно где какой блок заканчивается (в отличие от прыганья по indent'ам в shell, make и autotools).

Я бы сказал что изо всех сборочных систем синтаксис CMake наиболее близок к идеалу.

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

Названия команд кристально ясные

А есть какое-нибудь объяснение тому, что set - это функция, а не оператор? Или тому, что аргументы функции разделяются пробелами, а не запятыми?

необходимость указывать условие из IF в ELSE/ENDIF, так это во-первых, опционально (читайте доки)

Каким наркоманом надо быть, чтобы требовать ставить скобки после ENDIF()...

во-вторых - замечательная фича

...которая требует исправления условия в двух местах.

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

в отличие от прыганья по indent'ам в shell, make и autotools

4.2

в make разве что. в shell и autotools что-то не припоминаю блоков определяемых отступами.

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

waker ★★★★★
()

Платиновые треды девелопмента... cmake

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

А есть какое-нибудь объяснение тому, что set - это функция, а не оператор? Или тому, что аргументы функции разделяются пробелами, а не запятыми?

Парсить проще и запоминать меньше. People should not understand category theory in order to write «Hello, world».

...которая требует исправления условия в двух местах.

Опционально же. Смотря как тебе удобнее.

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

Парсить проще

Кому? Человеку не проще, на программу пофиг.

и запоминать меньше

Запоминать меньше, если делать как сделано уже где-то. Аргументы функций в скобках, но при этом разделяемые пробелами, я видел только в CMake.

...которая требует исправления условия в двух местах.

Опционально же.

Это было «во-первых» анонимуса, а я отвечал на его «во-вторых».

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

Разве это мешает их использовать с помощью библиотеки?

Sorcerer ★★★★★
()

make. А у тебя кривая архитектура и быдлокод. Страдай.

emulek
()
Ответ на: комментарий от i-rinat

Кстати, в autotools есть возможность сборки в другой директории?

кстати есть. Многие программы в ./build/ собираются. Или ты про что-то другое?

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

вангую, что в этом треде куча народу посоветовала cmake, а waker полил его же говном.

прочитал тред — ты знал.

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

тяжело, наверное, когда в гугле забанили...

я Ъ, не искал. Ты утверждал, ты и подтверди.

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