![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
SaDFromSpb |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: нет Всего: 3 |
Одна из основных фичей make в том, что она позволяет перекомпилировать (перетранслировать etc...) только те файлы, которые в этом нуждаются. Для этого необходимо составлять в мэйкфайле правила с зависимостями. Ну понятное дело, что составлять эти зависимости вручную не круто. Можно что-нибудь забыть или перепутать.
Исходя из этих соображений, мне захотелось написать такой мэйкфайл, который автоматически генерирует зависимости и собирает проект по одной команде make. (Можно конечно сделать отдельную команду depends для этого дела, и вызывать ее перед сборкой, если добавился новый файл или произошли изменения в инклудах. Но так делать лень =) и периодически обязательно будешь про это забывать.) В нете я нашел одно решение, которое удовлетворяло моим требованиям за одним исключением: генерируемые зависимости всегда были на шаг позади сборки. То есть сначала по старым зависимостям собирался проект, затем эти зависимости обновлялись. Вобщем, решено было создать свой супер-пупер-мэйкфайл, потому-что заниматься основной работой (писать доку) решительно не хотелось, а сидеть в интернете - небезопасно для карьеры =). Прежде всего пришлось свыкнуться с мыслью, что одним мэйкфайлом не обойдешся, потому что зависимости должны присутствовать в мэйкфайле в явном виде уже при его первичном проходе. Следовательно, они должны быть либо прописанны вручную (чего мы хотим избежать), либо подцеплены include'ом из другого(их) файла(ов). Пришлось создавать один файл под именем "Makefile", генерирующий зависимости и вызывающий другой файл с загадочным именем ".compile". Содержимое файла Makefile:
Содержимое файла ".compile"
Собствено вот. В данном примере в файлы зависимостей включаются и все библиотечные хедеры (это полезно, если параллельно редактируешь свою библиотеку). Если библиотечные хедеры не меняются, то флаг -M можно заменить на -MM. Тогда в зависимостях пропишутся только хедеры, включенные с помощью кавычек. Наверное, на больших проектах эта фигня будет добавлять лишние пару секунд при компиляции, да и наличие двух мэйкфайлов вместо одного - это как-то не круто. Но все-таки удобно, мне кажется. Если я тут понаписал полную фигню, и на самом деле все это - ламерство, и можно было сделать гораздо лучше по-другому, то просьба попинать. Так же приветствуются любые цензурные пожелания и замечания по доработке. Это сообщение отредактировал(а) SaDFromSpb - 15.10.2006, 22:29 -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
||||
|
|||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Интересное чтиво
![]() www.a-a-p.org И cons (но домашней не помню) |
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: нет Всего: 3 |
GrayCardinal,
Я про них не знал, но догадывался ![]() Я все-таки именно про Make. Потому что многие все-равно его используют. (Вот ты, к примеру, чем пользуешся?). И у нас в конторе его юзают в частности. Хотя за ссылочки спасибо. Попробую дома поковырять. Это сообщение отредактировал(а) SaDFromSpb - 16.10.2006, 15:21 -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
||||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 4 Всего: 317 |
aap, scons - намного более продвинуты чем make.
то, что ты пытаешься сваять - придумывать autoconf + automake сызнова для make. дело гиблое. все стрелки идут от make вперёд а не на make. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
SaDFromSpb,
Я - то ? У меня скрипт свой Perl'овский ![]() |
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: нет Всего: 3 |
Короче, понятно. Опять я позади планеты всей.
![]() Ладно. Будем более продвинутые темы осваивать. Отец! ![]() Но у меня есть оправдание - я на линухе сравнительно недавно программлю. Всем спасибо за инфу. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |