Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковМы, например, благодаря CMake, перешли с Visual Studio 6 на Visual Studio 10 за две недели и то только потому, что надо было выравнивать исходники в плане их компилируемости. Ну ладно, Толь, не скромничай, за две недели-то мы управились толко потому, что ты у нас такой гениальный. Но CMake всё равно классный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 12:04 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Благодарю всех ответивших - есть очень толковые советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 12:56 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Мне непонятно только - я сделал для пробы. Общая папка в ней две подпапки где собственно лежат два проекта с++ со своими Makefile. Каждый их этих Makefile имеет цель all. Если в общей папочки я напишу Makefile следующего вида Код: plaintext 1. 2. то соберется только тот проект который во второй папке а сам make наругает что Код: plaintext 1. 2. 3. а почему? по идее все инклюды же должны просто исполнятся и все... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 13:10 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
LowCoder, Вам выше уже писали - не надо include. Вам надо запускать вложенный экземпляр make для подпроектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 13:18 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
LowCoder а почему? по идее все инклюды же должны просто исполнятся и все... И я тоже писал. В одном makefile таргеты должны быть уникальны. В разных -- не обязаны. Если ты делаешь include , то ты соединяешь всё в один make-файл. Соответственно, таргеты должны быть уникальны во всех файлах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 16:55 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
MasterZivWhite OwlЯ абсолютно убежден что CMake (да и autotools) это ненужный костыль с гигантскими ограничениями. Ты абсолютно неправ. Как бы чтобы это доказать, достаточно поискать в сети проекты аналогичного назначения и прочитать мотивацию к их созданию. Очень хорошо это написано в Ant е. Почитай.Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть? А мотивация создания у костыля только одна - человек не может ходить на своих родных ногах, вот и изобретает дополнительные. Мотивация для создания Ant чуть более серьезная: у Sun был своя версия Solaris-only сборщика и когда Sun начала выкладывать свои проекты в открытый доступ этот собственный сборщик был переписан в кросс-платформенный. Почему у Sun был свой собственный сборщик, тоже более-менее понятно - коммерческая контора боялась использовать открытый инструмент. Как это все делает меня неправым в моем предыдущем утверждении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 19:16 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
White OwlMasterZivпропущено... Ты абсолютно неправ. Как бы чтобы это доказать, достаточно поискать в сети проекты аналогичного назначения и прочитать мотивацию к их созданию. Очень хорошо это написано в Ant е. Почитай.Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть? А мотивация создания у костыля только одна - человек не может ходить на своих родных ногах, вот и изобретает дополнительные. Рассуждение на уровне - yacc, lex костыль для тех кто матрицу переходов LALR грамматики составлять сам не хочет. Всегда следует отдавать предпочтение абстрактному описанию с последующей кодогенерацией ручному кодированию. Резон очень прост - всегда соскочить можно просто меняя кодогенератор. Как ты можешь соскочить с make мне не очень понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 20:03 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
С своей фирме мы достигли достаточного уровня лаконизма описания проекта, чтобы рекламировать 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 20:10 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
На выходе работы cmake мы имеем не только solution или makefile для билдмашины, но и xml описание зависимостей модулей, которое поставляется update service и обеспечивает обновление модулей по требованию (много их у нас). И это имея лишь абстрактное описание проекта - имхо, неплохие бенефиты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 20:14 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
White OwlMasterZivпропущено... Ты абсолютно неправ. Как бы чтобы это доказать, достаточно поискать в сети проекты аналогичного назначения и прочитать мотивацию к их созданию. Очень хорошо это написано в Ant е. Почитай.Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть? А мотивация создания у костыля только одна - человек не может ходить на своих родных ногах, вот и изобретает дополнительные. Мотивация для создания Ant чуть более серьезная: у Sun был своя версия Solaris-only сборщика и когда Sun начала выкладывать свои проекты в открытый доступ этот собственный сборщик был переписан в кросс-платформенный. Почему у Sun был свой собственный сборщик, тоже более-менее понятно - коммерческая контора боялась использовать открытый инструмент. Как это все делает меня неправым в моем предыдущем утверждении? Ты абсолютно неправ. Прогресс не остановить. Ура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 21:07 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть? Универсальным решением про сборке. Как бы твои рассуждения сводятся к тому, что самая первая реализация самая правильная. А мотивация создания у костыля только одна - человек не может ходить на своих родных ногах, вот и изобретает дополнительные. Ну да если он наступает на ногу, а нога гнется, то да, без костылей не обойтись... Мотивация для создания Ant чуть более серьезная: Ты НЕ прочитал. А зря. Там очень все доходчиво было. Основная идея — что make не переносим и не самодостаточен. Если ты будешь с этими фактами ещё и спорить — то уж и не знаю что тебе говорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2013, 21:19 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковWhite Owlпропущено... Чтобы доказать что я прав: достаточно вспомнить что и CMake и autotools выдают на выходе makefile который будет исполняться тем-же самым make. Спрашивается, чем кроме костыля эти инструменты могут быть? А мотивация создания у костыля только одна - человек не может ходить на своих родных ногах, вот и изобретает дополнительные. Рассуждение на уровне - yacc, lex костыль для тех кто матрицу переходов LALR грамматики составлять сам не хочет.Принцип верен, но расстояние между CFG и исходником с LALR намного больше чем разница между входным файлом CMakeList.txt и makefile. Не смотря на то, что я делал ручные переводы из CFG в LALR (два раза в код на О'Caml, один раз в С) я не смогу сходу взять любую грамматику и закодировать автомат для нее. Но взяв любой CMakeList.txt я могу почти сходу написать соответствующий makefile. Подглядеть в доку на CMake понадобится пару раз, но и только. Так что нужность Яка с кузенами я признаю, нужность CMake - не признаю. Анатолий ШироковВсегда следует отдавать предпочтение абстрактному описанию с последующей кодогенерацией ручному кодированию. Резон очень прост - всегда соскочить можно просто меняя кодогенератор.Здесь ключевое слово "абстрактному описанию". У CMake описание совсем не абстрактное, а очень даже конкретное. Анатолий ШироковКак ты можешь соскочить с make мне не очень понятно.А зачем мне с него соскакивать, простите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 00:10 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
MasterZivТы абсолютно неправ. Прогресс не остановить. Ура.Да, да. Все знают что я ретроград и пещерный человек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 00:18 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Тема очень кстати. Как раз выбораем билд-систему для перевода vs-проекта под linux - кажется CMake то что нужно. У кого есть поделитесь е-книжкой Mastering CMake желательно 5th или 4th edition, что-то она не особо гуглится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 09:34 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 12:02 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковНа выходе работы cmake мы имеем не только solution или makefile для билдмашины, но и xml описание зависимостей модулей, которое поставляется update service и обеспечивает обновление модулей по требованию (много их у нас). И это имея лишь абстрактное описание проекта - имхо, неплохие бенефиты. Надо ещё добавить, что с его CMake помощью мы ещё и перешли с vc6 сразу и на vc7, и на vc 2010, И автоматом получили систему сборки для Linux. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 12:26 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
v6yЯ прошу прощения что лезу в ваш калашниковый ряд, Ничего, ничего. только ряд калашный, а не калашниковый. v6yно по-моему cmake и autotool ставить в один ряд с make мягко говоря некорректно... У них несколько разные цели и задачи: Ровно одни и те же у них задачи. v6yThe purpose of the make utility is То мейк, я бы сказал. Собирать проекты. Те же цели и у всех остальных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 12:33 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
MasterZivТо мейк, я бы сказал. Собирать проекты. Те же цели и у всех остальных. Не согласен. У cmake задача сконфигурировать проект для его дальнейшей компиляции (то бишь учесть всяко-разные ньюансы как то наличие тех или иных библиотек, версию операционки и т.д.), а у make задача скомпилировать проект на основании правил прописанных в Makefile. Поэтому, с моей точки зрения, и make и cmake в крайнем случае уместно рассматривать только как части чего-то более целого и ни в коем случае не сравнивать их между собой. Спор между Анатолием и WhiteOwl собственно и сводится к тому, что (если рассматривать немного упрощено) Анатолий предпочитает генерировать Makefile с помощью cmake, а WhiteOwl писать его (Makefile) руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 13:41 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
v6yУ cmake задача сконфигурировать проект для его дальнейшей компиляции (то бишь учесть всяко-разные ньюансы как то наличие тех или иных библиотек, версию операционки и т.д.), а у make задача скомпилировать проект на основании правил прописанных в Makefile Вы так говорите, как будто запустить компиляцию из сгенерированных скриптов - это огромная работа, а не одна команда шелла. Фаза запуска компиляции никого не интересует при сравнении утилит сборки. Важна предоставляемая функциональность всей системы, а также уровень абстракции. Вы можете писать программу на ассемблере и гордится тем что знаете ассемблер, а другой за то же время сделает десяток программ на С (хоть при необходимости и на ассемлере сможет писать). Потому что уровень абстракции очень сильно влияет на скорость и качество разработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 14:17 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
White OwlАнатолий ШироковВсегда следует отдавать предпочтение абстрактному описанию с последующей кодогенерацией ручному кодированию. Резон очень прост - всегда соскочить можно просто меняя кодогенератор.Здесь ключевое слово "абстрактному описанию". У CMake описание совсем не абстрактное, а очень даже конкретное. Я не случайно привел описание одного из наших проектов, чтобы показать, что синтаксис описания вполне себе пригоден для звания "абстрактного описания". Артефакты не имеющие к этому описанию конечно присутствуют, но тоже достаточно легко поддаются анализу, если он потребуется. White OwlАнатолий ШироковКак ты можешь соскочить с make мне не очень понятно.А зачем мне с него соскакивать, простите? Вопрос твой ожидаемый. Но мало ли, захочешь подебажить свой проект под студией. Я себе это могу повзолить просто сгенерировав solution под конкретную версию студии? А ты как этого достигаешь? Конечно, если речь идет о небольшом проекте, то можно и накидать на коленке студийный проект, но когда у тебя 600 модулей со сложными взаимосвязями, то здесь без чего-либо отвязанного от конкретной среды сборки просто необходимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 14:26 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
v6yMasterZivТо мейк, я бы сказал. Собирать проекты. Те же цели и у всех остальных. Не согласен. У cmake задача сконфигурировать проект для его дальнейшей компиляции CMake -- система сборки. Её задача -- собирать. То же самое у make. Не надо тут играть словами и смыслами, и то, и другое, собирает выполняемые файлы из исходных текстов. Всё очень просто и ясно до предела. То, что CMake для этой цели использует make-файлы иногда -- это не принципиально, можно было бы написать бэкенд для CMAKE, который бы сам собирал всё. Просто у CMake как у проекта задача именно такая -- обеспечить возможность работать с твоим CMake-проектом в любых средах сборки или программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 15:13 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков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-а сделать, чтобы получить человеческую среду сборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 15:23 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков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. То что в своем 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. Как видишь, количество кода описывающего сценарий точно такое-же как и у CMake. Уровень абстракции описания тоже совпадает. Анатолий ШироковWhite Owlпропущено... А зачем мне с него соскакивать, простите?Вопрос твой ожидаемый. Но мало ли, захочешь подебажить свой проект под студией. Я себе это могу повзолить просто сгенерировав solution под конкретную версию студии? А ты как этого достигаешь? Конечно, если речь идет о небольшом проекте, то можно и накидать на коленке студийный проект, но когда у тебя 600 модулей со сложными взаимосвязями, то здесь без чего-либо отвязанного от конкретной среды сборки просто необходимо.Смеешься?! 600 модулей написанных для одного компилятора запихнуть в другой компилятор и просто так подебажить? Ну-ну... То-то тут постоянно возникают вопросы: "почему в vc это работает а в g++ не работает?", и наоборот. А ты сводишь всю сложность межкомпиляторного перехода к переводу сценария сборки? Шутник. И нет, я не захочу дебажить проект под студией. Во первых, для дебага есть логи, во вторых dbg. Зачем мне студия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 19:55 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
MasterZivCMake -- система сборки. Её задача -- собирать. То же самое у make. Не надо тут играть словами и смыслами, и то, и другое, собирает выполняемые файлы из исходных текстов. Всё очень просто и ясно до предела. Да вот мне тоже казалось, что тут всё просто и ясно: основная задача CMake именно подготовить к сборке в той или иной среде, задача же make - сама сборка как таковая. Просто у CMake как у проекта задача именно такая -- обеспечить возможность работать с твоим CMake-проектом в любых средах сборки или программирования. Совершенно верно. А задача make автоматически определить какие части большой программы перекомпилировать и с помощью каких команд. Казалось бы различие в целях и задачах на лицо, ан нет же... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 19:58 |
|
||
|
Организовать оптимально Makefile
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyv6yУ cmake задача сконфигурировать проект для его дальнейшей компиляции (то бишь учесть всяко-разные ньюансы как то наличие тех или иных библиотек, версию операционки и т.д.), а у make задача скомпилировать проект на основании правил прописанных в Makefile Вы так говорите, как будто запустить компиляцию из сгенерированных скриптов - это огромная работа, а не одна команда шелла. Фаза запуска компиляции никого не интересует при сравнении утилит сборки. Важна предоставляемая функциональность всей системы, а также уровень абстракции. Вы можете писать программу на ассемблере и гордится тем что знаете ассемблер, а другой за то же время сделает десяток программ на С (хоть при необходимости и на ассемлере сможет писать). Потому что уровень абстракции очень сильно влияет на скорость и качество разработки. Не совсем понял какое это имеет отношение к высказанному мной мнению, что сравнение cmake и make не является корректным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 19:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38287794&tid=2020158]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 173ms |

| 0 / 0 |
