powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Организовать оптимально Makefile
57 сообщений из 57, показаны все 3 страниц
Организовать оптимально Makefile
    #38285469
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос гуру make – как организовать правильно (так что би через 20 лет было не стыдно) make файл для следующего:
Есть три проекта с++. Все они лежат в общей папочке. Один из проектов как бы главный и использует остальные два. Остальные два могут собираться в своих папочках в основном для исполнения UNIT тестов. Однако главная цель таки собрать основной проект для 32 и 64 платформ. Вопрос как лучше поступить - сделать основной Makefile в общей папочке и держать в каждой подпапочке свой Makefile и основной Makefile просто будет инклюдить все остальные и можно ожидать что они будут последовательно исполнятся. Хотя как я понял цель all может быть только одна и если мы инклюдим в один файл три других то будет ругань со стороны make что мол цель all должна быть одна.
Либо сделать общий для всех проектов Makefile там определить цель all и в одном файле прописывать все зависимости. В этом случае у нас проект получается жесткой структуры – все завсит от одного файла, страдает модульнось.
Посоветуйте как сделать именно правильно. Что бы бабушка гордилась
Еще вдогонку - проект должен быть под 32 и 64 - как лучше поступить - сделать специальную цель для скажем 32 если я ожидаю, что большинство будет строить под 64 или держать два Makefile каждый для своей платформы в отдельных подпапках или как? Или скрипты специальные строительные сделать...
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285682
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВопрос гуру make – как организовать правильно (так что би через 20 лет было не стыдно) make файл для следующего:


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


авторЕсть три проекта с++. Все они лежат в общей папочке. Один из проектов как бы главный и использует остальные два. Остальные два могут собираться в своих папочках в основном для исполнения UNIT тестов. Однако главная цель таки собрать основной проект для 32 и 64 платформ. Вопрос как лучше поступить - сделать основной Makefile в общей папочке и держать в каждой подпапочке свой Makefile и основной Makefile просто будет инклюдить все остальные и можно ожидать что они будут последовательно исполнятся.

Как бы всё равно. MAKE сам не накладывает какие-то ограничения и правила. autotools -- те уже да, накладывают.


Код: plaintext
1.
Хотя как я понял цель all может быть только одна и если мы инклюдим в один файл три других то будет ругань со стороны make что мол цель all должна быть одна.



Цель all может быть только одна в одном makefile, в нескольких их может быть много.
Каждый makefile обрабатывается независимо.

авторЛибо сделать общий для всех проектов Makefile там определить цель all и в одном файле прописывать все зависимости. В этом случае у нас проект получается жесткой структуры – все завсит от одного файла, страдает модульнось.

Ну, не думаю, что модульность зависит от того, как написан makefile.

авторПосоветуйте как сделать именно правильно. Что бы бабушка гордилась
Еще вдогонку - проект должен быть под 32 и 64 - как лучше поступить - сделать специальную цель для скажем 32 если я ожидаю, что большинство будет строить под 64 или держать два Makefile каждый для своей платформы в отдельных подпапках или как? Или скрипты специальные строительные сделать...

Безусловно надо делать одним файлом, а целевую платформу задавать конфигурацией сборки.
autotools для этого ВСЕГДА используют off-the-tree сборку -- сборку вне дерева исходников, каждая конфигурация -- в отдельном поддереве ФС.

На самом деле рекомендую не использовать голый Makefile, а использовать либо autotools, либо qmake, либо CMake.
CMake рекомендую больше всего.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285742
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LowCoderВопрос гуру make – как организовать правильно (так что би через 20 лет было не стыдно) make файл для следующего:Возьми десяток многолетних open source проектов и посмотреть как это обычно делается.

LowCoderЕсть три проекта с++. Все они лежат в общей папочке. Один из проектов как бы главный и использует остальные два. Остальные два могут собираться в своих папочках в основном для исполнения UNIT тестов.Если хочешь делать на чистом make, то читай главы 4.6 Phony targets и 5.7 Recursive Use. Там даже примеры есть как организовать работу с под-проектами.

LowCoder Однако главная цель таки собрать основной проект для 32 и 64 платформ.Чем эти проекты отличаются друг от друга?
Вот у меня сейчас один и тот-же проект пишется на WinXP-32 и на Linux Debian 64. Один и тот же makefile, никаких поклонов в сторону ОС или битности нет вообще. Из makefile я вызываю просто gcc - а он уже сам знает на какой ОС он живет и какая целевая платформа.

Ну а если тебе действительно нужно какие-то специфические бубны для битности делать то можно например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ifeq ($(platform),32)
sometool = tool32
else 
sometool = tool64
endif

%.compiled: %.source
    $(sometool) $< $@


А потом можешь запускать make platform=32. Но в 99% случаев у тебя будет в системе какая-нибудь переменная которая однозначно подскажет платформу и вручную ее почти никогда задавать никогда не нужно. Ну разве что если ты делаешь кросс-компиляцию и хост-платформа не совпадает с целевой.

LowCoderВопрос как лучше поступить - сделать основной Makefile в общей папочке и держать в каждой подпапочке свой Makefile и основной Makefile просто будет инклюдить все остальные и можно ожидать что они будут последовательно исполнятся. Только не инклудить а вызывать.
В случае инклуда у тебя будет последовательное исполнение одного единственного скрипта сборки. И его всегда надо будет вызывать из корневого каталога. А если делать независимые сценарии для каждого подпроекта плюс один сценарий с subdirs в корне проекта, то можно будет собирать любой кусок проекта независимо (или зависимо от других). Опять таки, читай главу 5.7, там есть примеры.

LowCoderили держать два Makefile каждый для своей платформы в отдельных подпапках или как? Или скрипты специальные строительные сделать...Если нужно (удобнее), то можно сделать. что-то в духе:
Код: plaintext
1.
2.
# win32.mak
someflags = abcd

Код: plaintext
1.
2.
# win64.mak
someflags = efgh

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
# makefile
ifeq ($(OS),Windows_NT)
include win32.mak
else 
include win64.mak
endif

all: a b c d
   tool $(someflags) $^


Но в таком разделении есть смысл только если платформо-зависимых флагов много и их удобнее держать в отдельных файлах.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285751
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivавторВопрос гуру make – как организовать правильно (так что би через 20 лет было не стыдно) make файл для следующего:
Чтобы совсем не стыдно было через 20 лет, надо правильно организовать сборку проекта на CMake.У CMake смысл только один - если ты будешь собирать проект в разных make'ах. Вот если ты хочешь одновременно писать на GNU C/C++, на MS Visual Studio, и на каком-нибудь Borland - то CMake может быть полезен.
Но на самом деле люди выбирающие CMake просто не умеют писать makefile. Я абсолютно убежден что CMake (да и autotools) это ненужный костыль с гигантскими ограничениями. Все что могут делать эти уродцы (CMake и autotools) можно сделать на gnu make с той-же легкостью и намного большим контролем над происходящим. При этом, make есть под все платформы и не привязан ни к одному транслятору.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285786
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

А как просто в make сделать, что если в хедере изменилась только дата файла, то не надо перекомпилировать все что от него зависит?
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285793
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyв хедере изменилась только дата файла

А что за злодей её изменил? cvs up вернёт её обратно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285820
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite Owl,

А как просто в make сделать, что если в хедере изменилась только дата файла, то не надо перекомпилировать все что от него зависит?Если ты мне объяснишь смысл этого желания я тебе объясню как это сделать.
По моему, если дата заголовка изменилась, НАДО перекомпилировать все что от него зависит.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285823
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAnatoly Moskovskyв хедере изменилась только дата файла

А что за злодей её изменил? cvs up вернёт её обратно.
Дата может меняться по множеству причин, самая простая - внесли в текст изменения, потом вернули обратно.
И например, исходники в таком состоянии что нельзя делать ни коммит, ни апдейт.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285824
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЕсли ты мне объяснишь смысл этого желания я тебе объясню как это сделать.
По моему, если дата заголовка изменилась, НАДО перекомпилировать все что от него зависит.
А по-моему дата исходника никак не должна влиять на компиляцию - в ней не содержатся никакие данные от которых зависит содержимое конечного бинарника.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285827
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЕсли ты мне объяснишь смысл этого желания я тебе объясню как это сделать.
Т.е. просто объяснить нельзя - необходимые опции в make добавятся только после моего объяснения ?
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285874
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite Owl,

А как просто в make сделать, что если в хедере изменилась только дата файла, то не надо перекомпилировать все что от него зависит?Но вообще-то, это сделать элементарно. Просто убери зависимость от заголовка и все.

А если все совсем плохо, и тебе надо убрать заголовок из уже объявленного списка заголовков, то filter-out спасет:
Код: plaintext
1.
2.
3.
4.
5.
ALL_HEADERS = a.h b.h c.h d.h
IGNORE = b.h d.h
HEADERS = $(filter-out $(IGNORE), $(ALL_HEADERS))

%.o: %.c $(HEADERS)
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285881
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Наоборот, я хочу чтобы была зависимость от заголовка. Но не от его даты, а от содержимого.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285886
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlЕсли ты мне объяснишь смысл этого желания я тебе объясню как это сделать.
По моему, если дата заголовка изменилась, НАДО перекомпилировать все что от него зависит.
А по-моему дата исходника никак не должна влиять на компиляцию - в ней не содержатся никакие данные от которых зависит содержимое конечного бинарника.Дата исходника это главный источник ответа на вопрос: "изменился исходник или нет?"

Если ты хочешь вместо даты изменения файла проверять какой-то другой критерий (ну например есть реальная разница между рабочей копией исходника и архивной), то можно сделать первичную зависимость целей от специальных флаговых файлов а эти флаговые файлы уже создавать/трогать на основе диффа от рабочего исходника и архивной копии исходника.
Хотя зачем это все нужно я не представляю.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285909
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДата исходника это главный источник ответа на вопрос: "изменился исходник или нет?"
Нет. Это просто суррогатный признак изменения содержимого, за неимением лучшего в make.

White OwlЕсли ты хочешь вместо даты изменения файла проверять какой-то другой критерий (ну например есть реальная разница между рабочей копией исходника и архивной), то можно сделать первичную зависимость целей от специальных флаговых файлов а эти флаговые файлы уже создавать/трогать на основе диффа от рабочего исходника и архивной копии исходника.
Да я понял уже, что make не умеет этого без костылей :)
White OwlХотя зачем это все нужно я не представляю.
Если я работаю над проектом и внес изменения в хедер от которого зависит большая часть проекта, а потом вернул обратно (или например переключился на другую ветку в контроле версий, а потом обратно - эффект такой же: даты файлов меняются, а содержимое нет), то я не хочу ждать перекомпиляции проекта, когда этого можно избежать. Проекты они знаете ли немаленькие бывают.
Да и вообще, мало ли что вы себе не представляете. Вселенная гораздо шире, чем ваш личный опыт :)
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285936
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlХотя зачем это все нужно я не представляю.
Если я работаю над проектом и внес изменения в хедер от которого зависит большая часть проекта, а потом вернул обратно (или например переключился на другую ветку в контроле версий, а потом обратно - эффект такой же: даты файлов меняются, а содержимое нет), то я не хочу ждать перекомпиляции проекта, когда этого можно избежать.Хорошо, показывай альтернативу make которая способна узнать что файл вернули в предыдущее состояние.

Anatoly MoskovskyДа и вообще, мало ли что вы себе не представляете. Вселенная гораздо шире, чем ваш личный опыт :)Ну вот и обогати мой опыт пожалуйста.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38285989
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlХорошо, показывай альтернативу make которая способна узнать что файл вернули в предыдущее состояние.
scons умеет и по дате и по содержимому зависимости строить.
White OwlНу вот и обогати мой опыт пожалуйста.
Я выше уже привел два кейса.
В прошлом у меня бывали и более жесткие кейсы. Например если контроль версий при чекауте устанавливает в локальных файлах дату из репозитория, и как часть сборки генерятся какие-то файлы, то периодически возникала ситуация когда сгенеренные файлы были новее новой версии файлов из которых они генерились.
Это уже конкретная проблема, а не неудобство, и она не заметна пока не наткнешься случайно на неверно работающий код.
К счастью Git с которым я сейчас работаю всегда при чекауте ставит текущую дату и не приходится извращаться в проектах где не используется scons.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286028
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlХорошо, показывай альтернативу make которая способна узнать что файл вернули в предыдущее состояние.
scons умеет и по дате и по содержимому зависимости строить.Не совсем корректная альтернатива. scons это не инструмент, а библиотека. Пользуясь которой можно написать программу сценария. Если хочешь корректно сравнивать scons и make, то бери makefile в котором каждое правило расписано через $(shell ...).
В принципе, у scons есть положительные моменты. И я бы его пожалуй попытался бы использовать если бы он не был написан на Питоне. Вот когда его перепишут на чем-либо более надежном тогда и будем брать его в реальную работу. А пока, при всех своих достоинствах и умениях scons это симпатичная идея напрочь убитая собственным фреймворком.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286031
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlscons это не инструмент, а библиотека.
Да-да, а когда вы в ком. строке набираете scons - это вы пишете код использующий эту библиотеку ?
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286044
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite Owlscons это не инструмент, а библиотека.
Да-да, а когда вы в ком. строке набираете scons - это вы пишете код использующий эту библиотеку ?Нет, набирая scons в командной строке я запускаю скрипт который подгружает файл SConstruct как модуль и выполняет его. А вот когда я пишу содержимое файла SConstruct - то да, я пишу программу на Питоне 2.4 использующей эту библиотеку. Да... А если у меня стоит Питон 3.2, то scons мрёт почти сразу. А если 2.6 то работает, но потом тоже мрёт. Потому что Питон не совместим сам с собой. Поэтому не смотря на все плюшки scons'а - я очень не советую использовать его в серьезных проектах.

Из более-менее серьезных альтернатив gnu make я могу назвать только makepp. Вернее это альтернатива для scons. Тот же самый принцип, только Перл вместо Питона и при этом полная обратная совместимость со стандартным make.
Единственный минус makepp - его малая известность.
Я сам, если честно, только документацию на него читал, да ради прикола несколько примеров попробовал. А на практике, привычка к make берет свое :)
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286059
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlкогда я пишу содержимое файла SConstruct - то да, я пишу программу на Питоне
Если вы пишете этот файл как программу на питоне, а не как декларативное описание сборки, то вы неверно используете scons.
Не удивительно, что у всех он работает, а у вас - нет.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286259
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMasterZivпропущено...
Чтобы совсем не стыдно было через 20 лет, надо правильно организовать сборку проекта на CMake.У CMake смысл только один - если ты будешь собирать проект в разных make'ах. Вот если ты хочешь одновременно писать на GNU C/C++, на MS Visual Studio, и на каком-нибудь Borland - то CMake может быть полезен.
Но на самом деле люди выбирающие CMake просто не умеют писать makefile. Я абсолютно убежден что CMake (да и autotools) это ненужный костыль с гигантскими ограничениями. Все что могут делать эти уродцы (CMake и autotools) можно сделать на gnu make с той-же легкостью и намного большим контролем над происходящим. При этом, make есть под все платформы и не привязан ни к одному транслятору.

Люди выбирающие CMake планируют рационально свое время. Мы, например, благодаря CMake, перешли с Visual Studio 6 на Visual Studio 10 за две недели и то только потому, что надо было выравнивать исходники в плане их компилируемости. Сам же студийный проект мы получили за счетное число секунд. А проект нешуточный о 600 dll-ках. Так что, мета описание проекта плюс последующая генерация под конкретную систему сборки выбор профессионалов :D
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286430
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMasterZivпропущено...
Чтобы совсем не стыдно было через 20 лет, надо правильно организовать сборку проекта на CMake.У CMake смысл только один - если ты будешь собирать проект в разных make'ах.
...
При этом, make есть под все платформы и не привязан ни к одному транслятору.

У cmake есть один смысл — он человеческий, в отличие от make, autotools и многого другого. И работает, в отличие от boostbuild и другого человеческого в этой области.

Вот в этом и смысл использовать его.
А про make под все платформы — это просто песня, ну так повеселил...

Во-первых, его нет. Т.е. он есть, но он везде разный. А во вторых, одним make ты нифига не соберешь, нужен shell и ещё много всякой всячины. А ее нет.

Вот за этим и нужен CMake.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286451
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНо на самом деле люди выбирающие CMake просто не умеют писать makefile.

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

Make — это абсолютно невменяемый тул,
У его существования есть только два оправдания — традиция, раньше ничего другого не было, и что он таки работает.

Кстати, я видал не раз, как люди просто писали скрипты сборки на шеле, чем связываться с make ом.

White OwlЯ абсолютно убежден что CMake (да и autotools) это ненужный костыль с гигантскими ограничениями.


Ты абсолютно неправ.
Как бы чтобы это доказать, достаточно поискать в сети проекты аналогичного назначения и прочитать мотивацию к их созданию.
Очень хорошо это написано в Ant е.
Почитай.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286490
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite Owl,

А как просто в make сделать, что если в хедере изменилась только дата файла, то не надо перекомпилировать все что от него зависит?
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286492
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlто filter-out спасет:
Код: plaintext
1.
2.
3.
4.
5.
ALL_HEADERS = a.h b.h c.h d.h
IGNORE = b.h d.h
HEADERS = $(filter-out $(IGNORE), $(ALL_HEADERS))

%.o: %.c $(HEADERS)



... который поддерживается только GNU Make-ом...
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286496
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковМы, например, благодаря CMake, перешли с Visual Studio 6 на Visual Studio 10 за две недели и то только потому, что надо было выравнивать исходники в плане их компилируемости.

Ну ладно, Толь, не скромничай, за две недели-то мы управились толко потому, что ты у нас такой гениальный.
Но CMake всё равно классный.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286608
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю всех ответивших - есть очень толковые советы.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286638
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне непонятно только - я сделал для пробы. Общая папка в ней две подпапки где собственно лежат два проекта с++ со своими Makefile. Каждый их этих Makefile имеет цель all. Если в общей папочки я напишу Makefile следующего вида

Код: plaintext
1.
2.
include $(PWD)/subfolder1/Makefile
include $(PWD)/subfolder2/Makefile



то соберется только тот проект который во второй папке а сам make наругает что

Код: plaintext
1.
2.
3.
$:~/projfolder$ make
/home/cooluser/projfolder/subfolder1/Makefile:2: warning: overriding commands for target `all'
/home/cooluser/projfolder/subfolder2/Makefile:11: warning: ignoring old commands for target `all'



а почему? по идее все инклюды же должны просто исполнятся и все...
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38286663
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LowCoder,

Вам выше уже писали - не надо include.
Вам надо запускать вложенный экземпляр make для подпроектов
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287117
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LowCoder
а почему? по идее все инклюды же должны просто исполнятся и все...

И я тоже писал. В одном makefile таргеты должны быть уникальны.
В разных -- не обязаны.
Если ты делаешь include , то ты соединяешь всё в один make-файл.
Соответственно, таргеты должны быть уникальны во всех файлах.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287346
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivWhite OwlЯ абсолютно убежден что CMake (да и autotools) это ненужный костыль с гигантскими ограничениями. Ты абсолютно неправ.
Как бы чтобы это доказать, достаточно поискать в сети проекты аналогичного назначения и прочитать мотивацию к их созданию.
Очень хорошо это написано в Ant е.
Почитай.Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть?
А мотивация создания у костыля только одна - человек не может ходить на своих родных ногах, вот и изобретает дополнительные.

Мотивация для создания Ant чуть более серьезная: у Sun был своя версия Solaris-only сборщика и когда Sun начала выкладывать свои проекты в открытый доступ этот собственный сборщик был переписан в кросс-платформенный.
Почему у Sun был свой собственный сборщик, тоже более-менее понятно - коммерческая контора боялась использовать открытый инструмент.

Как это все делает меня неправым в моем предыдущем утверждении?
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287398
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMasterZivпропущено...
Ты абсолютно неправ.
Как бы чтобы это доказать, достаточно поискать в сети проекты аналогичного назначения и прочитать мотивацию к их созданию.
Очень хорошо это написано в Ant е.
Почитай.Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть?
А мотивация создания у костыля только одна - человек не может ходить на своих родных ногах, вот и изобретает дополнительные.


Рассуждение на уровне - yacc, lex костыль для тех кто матрицу переходов LALR грамматики составлять сам не хочет. Всегда следует отдавать предпочтение абстрактному описанию с последующей кодогенерацией ручному кодированию. Резон очень прост - всегда соскочить можно просто меняя кодогенератор. Как ты можешь соскочить с make мне не очень понятно.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287406
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С своей фирме мы достигли достаточного уровня лаконизма описания проекта, чтобы рекламировать CMake как достойное средство. Чтобы не быть голословным:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
project (APPSERVER)

file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Generated)

set(GSOAP_GENERATED_SRCS 
	${CMAKE_CURRENT_BINARY_DIR}/Generated/soapc.cpp
	${CMAKE_CURRENT_BINARY_DIR}/Generated/soaprolisappserviceproxy.cpp
	${CMAKE_CURRENT_BINARY_DIR}/Generated/soaprolisappserviceproxy.h
	${CMAKE_CURRENT_BINARY_DIR}/Generated/soaph.h
	${CMAKE_CURRENT_BINARY_DIR}/Generated/soapstub.h
)

add_custom_command(
	OUTPUT ${GSOAP_GENERATED_SRCS}
	COMMAND ${SOAPCPP2} -I${GSOAP_DIR}/import -d${CMAKE_CURRENT_BINARY_DIR}/Generated -i -C -L -x ${CMAKE_CURRENT_SOURCE_DIR}/service.sdh
	DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/service.sdh
)       

include_directories(BEFORE . ${CMAKE_CURRENT_BINARY_DIR}/Generated)
include_directories(${GSOAP_DIR})
include_directories(BEFORE . ${APPSERVER_BINARY_DIR}/Generated)
include_directories(${rolis_SOURCE_DIR}/thirdparty/gsoap)

rolis_library( appserver
    COMPILE_FLAGS
		${GSOAP_DEFINES}
		${OPENSSL_DEFINES}
		${ZLIB_DEFINES}
    SOURCES
		${GSOAP_GENERATED_SRCS}
		client.cpp
		${GSOAP_DIR}/stdsoap2.cpp
		${GSOAP_DIR}/stdsoap2.h
		${rolis_SOURCE_DIR}/rolis/appserverproxy.h
		appserverproxy.cpp
		service.sdh
    DEPENDS
		textutils
    LINK_LIBS
		${OPENSSL_LIBS}
		${ZLIB_LIBS}
    STATIC
)
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287407
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На выходе работы cmake мы имеем не только solution или makefile для билдмашины, но и xml описание зависимостей модулей, которое поставляется update service и обеспечивает обновление модулей по требованию (много их у нас). И это имея лишь абстрактное описание проекта - имхо, неплохие бенефиты.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287444
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMasterZivпропущено...
Ты абсолютно неправ.
Как бы чтобы это доказать, достаточно поискать в сети проекты аналогичного назначения и прочитать мотивацию к их созданию.
Очень хорошо это написано в Ant е.
Почитай.Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть?
А мотивация создания у костыля только одна - человек не может ходить на своих родных ногах, вот и изобретает дополнительные.

Мотивация для создания Ant чуть более серьезная: у Sun был своя версия Solaris-only сборщика и когда Sun начала выкладывать свои проекты в открытый доступ этот собственный сборщик был переписан в кросс-платформенный.
Почему у Sun был свой собственный сборщик, тоже более-менее понятно - коммерческая контора боялась использовать открытый инструмент.

Как это все делает меня неправым в моем предыдущем утверждении?


Ты абсолютно неправ. Прогресс не остановить. Ура.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287455
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть?

Универсальным решением про сборке.
Как бы твои рассуждения сводятся к тому, что самая первая реализация самая правильная.

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


Ну да если он наступает на ногу, а нога гнется, то да, без костылей не обойтись...

Мотивация для создания Ant чуть более серьезная:


Ты НЕ прочитал. А зря. Там очень все доходчиво было.
Основная идея — что make не переносим и не самодостаточен. Если ты будешь с этими фактами ещё и спорить — то уж и не знаю что тебе говорить.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287634
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковWhite Owlпропущено...
Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть?
А мотивация создания у костыля только одна - человек не может ходить на своих родных ногах, вот и изобретает дополнительные.


Рассуждение на уровне - yacc, lex костыль для тех кто матрицу переходов LALR грамматики составлять сам не хочет.Принцип верен, но расстояние между CFG и исходником с LALR намного больше чем разница между входным файлом CMakeList.txt и makefile.
Не смотря на то, что я делал ручные переводы из CFG в LALR (два раза в код на О'Caml, один раз в С) я не смогу сходу взять любую грамматику и закодировать автомат для нее. Но взяв любой CMakeList.txt я могу почти сходу написать соответствующий makefile. Подглядеть в доку на CMake понадобится пару раз, но и только.
Так что нужность Яка с кузенами я признаю, нужность CMake - не признаю.

Анатолий ШироковВсегда следует отдавать предпочтение абстрактному описанию с последующей кодогенерацией ручному кодированию. Резон очень прост - всегда соскочить можно просто меняя кодогенератор.Здесь ключевое слово "абстрактному описанию". У CMake описание совсем не абстрактное, а очень даже конкретное.

Анатолий ШироковКак ты можешь соскочить с make мне не очень понятно.А зачем мне с него соскакивать, простите?
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287639
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТы абсолютно неправ. Прогресс не остановить. Ура.Да, да. Все знают что я ретроград и пещерный человек.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38287794
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема очень кстати. Как раз выбораем билд-систему для перевода vs-проекта под linux - кажется CMake то что нужно. У кого есть поделитесь е-книжкой Mastering CMake желательно 5th или 4th edition, что-то она не особо гуглится.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38288088
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivУ cmake есть один смысл — он человеческий, в отличие от make, autotools и многого другого. И работает, в отличие от boostbuild и другого человеческого в этой области.

Я прошу прощения что лезу в ваш калашниковый ряд, но по-моему cmake и autotool ставить в один ряд с make мягко говоря некорректно... У них несколько разные цели и задачи:

The purpose of the make utility is to determine automatically which pieces of a large program need to be recompiled, and issue the commands to recompile them. (И на мой скромный взгляд, ничего более вменяемого чем make для этой цели ещё не придумали)

The "cmake" executable is the CMake command-line interface. It may be used to configure projects in scripts.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38288146
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковНа выходе работы cmake мы имеем не только solution или makefile для билдмашины, но и xml описание зависимостей модулей, которое поставляется update service и обеспечивает обновление модулей по требованию (много их у нас). И это имея лишь абстрактное описание проекта - имхо, неплохие бенефиты.

Надо ещё добавить, что с его CMake помощью мы ещё и перешли с vc6 сразу и на vc7, и на vc 2010,
И автоматом получили систему сборки для Linux.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38288155
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6yЯ прошу прощения что лезу в ваш калашниковый ряд,

Ничего, ничего.
только ряд калашный, а не
калашниковый.


v6yно по-моему cmake и autotool ставить в один ряд с make мягко говоря некорректно... У них несколько разные цели и задачи:


Ровно одни и те же у них задачи.

v6yThe purpose of the make utility is

То мейк, я бы сказал. Собирать проекты.
Те же цели и у всех остальных.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38288296
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТо мейк, я бы сказал. Собирать проекты.
Те же цели и у всех остальных.

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

Спор между Анатолием и WhiteOwl собственно и сводится к тому, что (если рассматривать немного упрощено) Анатолий предпочитает генерировать Makefile с помощью cmake, а WhiteOwl писать его (Makefile) руками.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38288371
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6yУ cmake задача сконфигурировать проект для его дальнейшей компиляции (то бишь учесть всяко-разные ньюансы как то наличие тех или иных библиотек, версию операционки и т.д.), а у make задача скомпилировать проект на основании правил прописанных в Makefile
Вы так говорите, как будто запустить компиляцию из сгенерированных скриптов - это огромная работа, а не одна команда шелла.
Фаза запуска компиляции никого не интересует при сравнении утилит сборки.
Важна предоставляемая функциональность всей системы, а также уровень абстракции.
Вы можете писать программу на ассемблере и гордится тем что знаете ассемблер, а другой за то же время сделает десяток программ на С (хоть при необходимости и на ассемлере сможет писать). Потому что уровень абстракции очень сильно влияет на скорость и качество разработки.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38288389
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlАнатолий ШироковВсегда следует отдавать предпочтение абстрактному описанию с последующей кодогенерацией ручному кодированию. Резон очень прост - всегда соскочить можно просто меняя кодогенератор.Здесь ключевое слово "абстрактному описанию". У CMake описание совсем не абстрактное, а очень даже конкретное.

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

White OwlАнатолий ШироковКак ты можешь соскочить с make мне не очень понятно.А зачем мне с него соскакивать, простите?

Вопрос твой ожидаемый. Но мало ли, захочешь подебажить свой проект под студией. Я себе это могу повзолить просто сгенерировав solution под конкретную версию студии? А ты как этого достигаешь? Конечно, если речь идет о небольшом проекте, то можно и накидать на коленке студийный проект, но когда у тебя 600 модулей со сложными взаимосвязями, то здесь без чего-либо отвязанного от конкретной среды сборки просто необходимо.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38288472
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6yMasterZivТо мейк, я бы сказал. Собирать проекты.
Те же цели и у всех остальных.

Не согласен. У cmake задача сконфигурировать проект для его дальнейшей компиляции


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

То, что CMake для этой цели использует make-файлы иногда -- это не принципиально, можно было бы написать бэкенд для CMAKE, который бы сам собирал всё.
Просто у CMake как у проекта задача именно такая -- обеспечить возможность работать с твоим CMake-проектом в любых средах сборки или программирования.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38288505
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковWhite OwlА зачем мне с него соскакивать, простите?

Вопрос твой ожидаемый. Но мало ли, захочешь подебажить свой проект под студией. Я себе это могу позволить просто сгенерировав solution под конкретную версию студии. А ты как этого достигаешь? Конечно, если речь идет о небольшом проекте, то можно и накидать на коленке студийный проект, но когда у тебя 600 модулей со сложными взаимосвязями, то здесь без чего-либо отвязанного от конкретной среды сборки просто нельзя.

Вот нужные и важные слова про Make, про его недостатки.
Это из документации по Ant, Java-based build tool.

Ant docsIntroduction

Apache Ant is a Java-based build tool. In theory, it is kind of like make, without make's wrinkles.
Why?

Why another build tool when there is already make, gnumake, nmake, jam, and others? Because all those tools have limitations that Ant's original author couldn't live with when developing software across multiple platforms. Make-like tools are inherently shell-based : they evaluate a set of dependencies, then execute commands not unlike what you would issue on a shell . This means that you can easily extend these tools by using or writing any program for the OS that you are working on; however, this also means that you limit yourself to the OS , or at least the OS type, such as Unix, that you are working on.

...

Ant is different. Instead of a model where it is extended with shell-based commands, Ant is extended using Java classes . Instead of writing shell commands, the configuration files are XML-based, calling out a target tree where various tasks get executed. Each task is run by an object that implements a particular Task interface.

Granted, this removes some of the expressive power that is inherent in being able to construct a shell command such as `find . -name foo -exec rm {}`, but it gives you the ability to be cross-platform--to work anywhere and everywhere . And hey, if you really need to execute a shell command, Ant has an <exec> task that allows different commands to be executed based on the OS it is executing on.



(выделено жирным мной)

Я не считаю Ant идеальным, но этот проект -- минимальное усилие, которое надо было давно уже до появления ant-а сделать, чтобы получить человеческую среду сборки.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38288997
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковWhite Owlпропущено...
Здесь ключевое слово "абстрактному описанию". У CMake описание совсем не абстрактное, а очень даже конкретное.

Я не случайно привел описание одного из наших проектов, чтобы показать, что синтаксис описания вполне себе пригоден для звания "абстрактного описания". Нет, не пригоден. Хорошо, перефразирую: Уровень абстракции у CMake абсолютно такой же как и у make.

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

Вот пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
subdirs = tools app app-libs plugins 
.PHONY: $(subdirs)

all: $(subdirs)

app plugins: app-libs

app-libs: tools

# стандартная цель
clean-subdirs = $(addsuffix .clean,$(subdirs))

clean: $(clean-subdirs)

# И наконец правила для обработки целей
$(subdirs):
	$(MAKE) -C $@

$(clean-subdirs):
	$(MAKE) -C $(basename $@) clean



То что в своем CMakeList.txt ты не показываешь как конкретно надо компилировать .cpp ничего не значит. Я в своем makefile тоже могу этого не показывать.
Вот тебе makefile от одного из плагинов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
PROJECT=ba_zip
SOURCES=ba-zip.c unzip.c ioapi.c

BUILD_DIR=.build
OBJECTS = $(addprefix $(BUILD_DIR)/, $(SOURCES:.c=.o))
CFLAGS  = $(shell pkg-config --cflags gtk+-2.0 gmodule-2.0) -I../../app $(CFLAG_PIC)
LDFLAGS = -shared $(shell pkg-config --libs gtk+-2.0 gmodule-2.0) -lz
CC = gcc

$(bin_dir)/$(PROJECT).$(lib_suffix): $(OBJECTS)

$(OBJECTS): | $(BUILD_DIR)

$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

clean:
	rm -f $(PROJECT)
	rm -rf $(BUILD_DIR)

# А в config.mak у меня задаются bin_dir и ОС-зависимый суффикс для динамических библиотек.
include ../config.mak


Как видишь, количество кода описывающего сценарий точно такое-же как и у CMake. Уровень абстракции описания тоже совпадает.


Анатолий ШироковWhite Owlпропущено...
А зачем мне с него соскакивать, простите?Вопрос твой ожидаемый. Но мало ли, захочешь подебажить свой проект под студией. Я себе это могу повзолить просто сгенерировав solution под конкретную версию студии? А ты как этого достигаешь? Конечно, если речь идет о небольшом проекте, то можно и накидать на коленке студийный проект, но когда у тебя 600 модулей со сложными взаимосвязями, то здесь без чего-либо отвязанного от конкретной среды сборки просто необходимо.Смеешься?!
600 модулей написанных для одного компилятора запихнуть в другой компилятор и просто так подебажить? Ну-ну... То-то тут постоянно возникают вопросы: "почему в vc это работает а в g++ не работает?", и наоборот. А ты сводишь всю сложность межкомпиляторного перехода к переводу сценария сборки? Шутник.

И нет, я не захочу дебажить проект под студией. Во первых, для дебага есть логи, во вторых dbg. Зачем мне студия?
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38289003
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivCMake -- система сборки. Её задача -- собирать. То же самое у make.
Не надо тут играть словами и смыслами, и то, и другое, собирает выполняемые файлы из исходных текстов.
Всё очень просто и ясно до предела.

Да вот мне тоже казалось, что тут всё просто и ясно: основная задача CMake именно подготовить к сборке в той или иной среде, задача же make - сама сборка как таковая.

Просто у CMake как у проекта задача именно такая -- обеспечить возможность работать
с твоим CMake-проектом в любых средах сборки или программирования.

Совершенно верно. А задача make автоматически определить какие части большой программы перекомпилировать и с помощью каких команд. Казалось бы различие в целях и задачах на лицо, ан нет же... :-)
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38289006
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyv6yУ cmake задача сконфигурировать проект для его дальнейшей компиляции (то бишь учесть всяко-разные ньюансы как то наличие тех или иных библиотек, версию операционки и т.д.), а у make задача скомпилировать проект на основании правил прописанных в Makefile
Вы так говорите, как будто запустить компиляцию из сгенерированных скриптов - это огромная работа, а не одна команда шелла.
Фаза запуска компиляции никого не интересует при сравнении утилит сборки.
Важна предоставляемая функциональность всей системы, а также уровень абстракции.
Вы можете писать программу на ассемблере и гордится тем что знаете ассемблер, а другой за то же время сделает десяток программ на С (хоть при необходимости и на ассемлере сможет писать). Потому что уровень абстракции очень сильно влияет на скорость и качество разработки.

Не совсем понял какое это имеет отношение к высказанному мной мнению, что сравнение cmake и make не является корректным.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38289012
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y,





Не совсем понял какое это имеет отношение к высказанному мной мнению, что сравнение cmake и make не является корректным.

Такое отношение, что сравнение вполне корректно.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38289020
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivv6y,

Не совсем понял какое это имеет отношение к высказанному мной мнению, что сравнение cmake и make не является корректным.

Вырвано из контекста!
Такое отношение, что сравнение вполне корректно.
Ок, остамся каждый при своем мнении :-)
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38289036
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y,

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

Так же и тут, все выше отписавшиеся, имеют вполне конкретные пожелания к системе сборки, им нужно достичь определенных целей, собрать проект, отследить зависимости. Им не важна внутренняя кухня, вот они и сравнивают, относительно целей. Чтобы собрать эту кучу исходников мне нужно потратить столько-то времени и написать столько-то строчек кода на CMake, или столько времени и кода на make + оценивают легкость сопровождения. И совершенно не важно что один из них использует другой внутренне.

Сравнение идет с точки зрения интерфейса, что конкретно нужно сделать чтобы собрать проект. А все остальное, корректно не корректно, это пустософия.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38289042
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВот нужные и важные слова про Make, про его недостатки.
Это из документации по Ant, Java-based build tool.Чушь там написана.

Ant docsWhy another build tool when there is already make, gnumake, nmake, jam, and others? Because all those tools have limitations that Ant's original author couldn't live with when developing software across multiple platforms. Make-like tools are inherently shell-based : they evaluate a set of dependencies, then execute commands not unlike what you would issue on a shell . This means that you can easily extend these tools by using or writing any program for the OS that you are working on; however, this also means that you limit yourself to the OS , or at least the OS type, such as Unix, that you are working on.При чем здесь ОС? Зависимость не от ОС, а от наличия тех самых инструментов.
А gnu tool chain есть практически под все ОС.

Ant docsAnt is different. Instead of a model where it is extended with shell-based commands, Ant is extended using Java classes . Instead of writing shell commands, the configuration files are XML-based, calling out a target tree where various tasks get executed. Each task is run by an object that implements a particular Task interface.А если конкретно, то у shell-based сборщиков работу делают shell commands, а у Ant - некие объекты с Task интерфейсом.
Правда если заглянуть внутрь этих объектов то ты найдешь там те-же самые shell commands. Но зато XML, tasks, target tree... слова красивые...


Надо читать не рекламу а историю.
Когда Sun был крутой фирмой а Solaris крутой ОС - в Solaris использовали свой make. Но это был не GNU make, а своя собственная утилита, потому что open-source утилиты в крутых фирмах в те времена не использовали. Да и был GNU make тогда еще маленький и глупенький.
А потом придумали Java и встал вопрос о кросс-платформенности. Но GNU make по прежнему был open-source а Sun - крутой фирмой которая косо смотрит на open-source утилиты (если они написаны не ими). Поэтому и родился Ant - потому что Java и потому что "не-make".

И msbuild по этой же причине появился - потому что "не-make". Микрософты боролись за уникальность и за то чтобы пользователи подсев на студию не могли с нее слезть. Поэтому они и заменили почти универсальный nmake на msbuild а потом и его убили ради сборщика встроенного в студию.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38289069
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_v6y,

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

Так же и тут, все выше отписавшиеся, имеют вполне конкретные пожелания к системе сборки, им нужно достичь определенных целей, собрать проект, отследить зависимости. Им не важна внутренняя кухня, вот они и сравнивают, относительно целей. Чтобы собрать эту кучу исходников мне нужно потратить столько-то времени и написать столько-то строчек кода на CMake, или столько времени и кода на make + оценивают легкость сопровождения. И совершенно не важно что один из них использует другой внутренне.

Сравнение идет с точки зрения интерфейса, что конкретно нужно сделать чтобы собрать проект. А все остальное, корректно не корректно, это пустософия.
Вы извините, но пустософия это как раз ваш пост, особенно в плане сравнение бульдозера с джинсами. Сравнивать вещи можно, но вы же не назовете джинсы невменяемой вещью, только потому что ими нельзя землю копать?
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38290035
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y,

Да давайте закроем тему. Всем все ясно.
...
Рейтинг: 0 / 0
Организовать оптимально Makefile
    #38291062
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlAnatoly Moskovskyпропущено...

Да-да, а когда вы в ком. строке набираете scons - это вы пишете код использующий эту библиотеку ?Нет, набирая scons в командной строке я запускаю скрипт который подгружает файл SConstruct как модуль и выполняет его. А вот когда я пишу содержимое файла SConstruct - то да, я пишу программу на Питоне 2.4 использующей эту библиотеку. Да... А если у меня стоит Питон 3.2, то scons мрёт почти сразу. А если 2.6 то работает, но потом тоже мрёт. Потому что Питон не совместим сам с собой. Поэтому не смотря на все плюшки scons'а - я очень не советую использовать его в серьезных проектах.

Из более-менее серьезных альтернатив gnu make я могу назвать только makepp. Вернее это альтернатива для scons. Тот же самый принцип, только Перл вместо Питона и при этом полная обратная совместимость со стандартным make.
Единственный минус makepp - его малая известность.
Я сам, если честно, только документацию на него читал, да ради прикола несколько примеров попробовал. А на практике, привычка к make берет свое :)
ой какие ужасы

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

напиши к примеру создание rpm-ки в мейкфайле, я поржу
...
Рейтинг: 0 / 0
57 сообщений из 57, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Организовать оптимально Makefile
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]