Вырезать часть исходника., peredoz, 19-Окт-05, 13:08 [смотреть все]Доброго всем! Допустим: существует нормальный исходник утилки (в данном случае mpack). Исходник, понятно, содержит все makefil-ы и отлично билдится в бинарь командой make. Я не проверял, но наверняка гдето в глубинах этого исходника есть функция, которая на вход принимает строку, mime-type, прочие сопроводительные параметры и возвращает упакованную в mime строку. При этом функция, ясен пень, ссылается на стандартные и кастомные либы, в общем зависит от других (грубо говоря) файлов пакета и не только пакета. Задача: Необхоимо в отдельной папке (файле) создать >>>исходник<<< либы, которая содержит только указанную выше функцию упаковки, и файлы (исходники, .h файлы, возможно либы) необходимые для правильной работы функции. Итак вопрос: Может ли ктонибудь из опытных в данной теме товарищей хотябы приблизительно описать, как он видит >>автоматизацию<< такого процесса? Потомучто логика подсказывает что это возможно, т.к. компилятор это и делает. Приветствуются любые предположения, т.к. я ничего больше 5000 строк кода в своей жизни не написал, соответственно опыта - почти ноль. Понятно, что все это можно отследить руками(глазами) и т.д. но интересует именно возможность автоматизации (хотябы частичной) такого процесса. Почитав man по gcc я заподозрил что в этом процессе явно будет участвовать ключ "-E"(не линковать, не компилить), и понятен красен нужно доруливать makefile. Но объем настроек и параметров gcc не подразумевает быстрое освоение вопроса :( Заранее благодарен за любой ответ. З.Ы. Просто я задолбался смотреть как мучаются мои программеры, пытаясь с нуля сваять SMTP клиент для нашей проги под Thandem. з.ы.ы. Если кто имеет (или знает где взять) книги "GCC. Настольная книга пользователей, программистов и системных администраторов"-Гриффитс А., и "GCC. Полное руководство"-Гриффитс А., поделитесь линками плиз. |
- Вырезать часть исходника., enot, 18:26 , 19-Окт-05 (1)
>з.ы.ы. Если кто имеет (или знает где взять) книги >"GCC. Настольная книга пользователей, программистов и системных администраторов"-Гриффитс А., и "GCC. Полное >руководство"-Гриффитс А., поделитесь линками плиз. Страшная правда жизни: Это не две, а одна книга. Просто у нее два названия. Т.е. отличие только в обложке. Книгоиздатели прикалываются.
- Вырезать часть исходника., peredoz, 20:16 , 19-Окт-05 (2)
>Страшная правда жизни: >Это не две, а одна книга. Просто у нее два названия. Т.е. >отличие только в обложке. Книгоиздатели прикалываются. Уже легше :) А правильное аглицкое название не известно ненароком?
- Вырезать часть исходника., vnp, 23:26 , 19-Окт-05 (3)
>Доброго всем! >Задача: Необхоимо в отдельной папке (файле) создать >>>исходник<<< либы, которая содержит только указанную выше функцию упаковки, и файлы (исходники, .h файлы, возможно либы) необходимые для правильной работы функции. > >Итак вопрос: Может ли ктонибудь из опытных в данной теме товарищей хотябы приблизительно описать, как он видит >>автоматизацию<< такого процесса? Потомучто логика подсказывает что это возможно, т.к. компилятор это и делает. Приветствуются любые предположения, т.к. я ничего больше 5000 строк кода в своей жизни не написал, соответственно опыта - почти ноль. > >Понятно, что все это можно отследить руками(глазами) и т.д. но интересует именно >возможность автоматизации (хотябы частичной) такого процесса. Совсем автоматически не получится. План действий примерно такой: Исходники: Комментируете (ifdefом) функцию main. Добавляете в makefile цель, строящую библиотеку (libsomething.a) изо всех файлов утилиты. Пишете файл с функцией main, которая содержит вызов интересующей вас функции. Собираете утилиту из этого файла и библиотеки. Каким-нибудь nm смотрите, какие файлы были выдернуты из библиотеки. Именно они вас и интересуют. Инклюды: Генерируете зависимости (см. флаг gcc -MM) для нужных исходных файлов. Это можно при случае запихать в makefile, но вероятно, оно там уже есть. Качество вычленения будет сильно зависеть от того, насколько качественно структурированы исходники. Если подцепится очень много лишнего, можно применить более трудоемкий подход (выделить каждую функцию своим ifdefом, и компилировать каждый файл столько раз, сколько в нем есть функций, каждый раз со своим -D; со статическими функциями будут отдельные сложности). Если очень хочется полной автоматизации, то потренироваться руками, а потом запихать все в скрипт.
- Вырезать часть исходника., peredoz, 14:28 , 20-Окт-05 (4)
> >Совсем автоматически не получится. План действий примерно такой: > >Исходники: >Комментируете (ifdefом) функцию main. Добавляете в makefile цель, строящую библиотеку (libsomething.a) изо >всех файлов утилиты. Пишете файл с функцией main, которая содержит вызов >интересующей вас функции. Собираете утилиту из этого файла и библиотеки. Каким-нибудь >nm смотрите, какие файлы были выдернуты из библиотеки. Именно они вас >и интересуют. > >Инклюды: >Генерируете зависимости (см. флаг gcc -MM) для нужных исходных файлов. Это можно >при случае запихать в makefile, но вероятно, оно там уже есть. > Большой сенька перемяч! > >Качество вычленения будет сильно зависеть от того, насколько качественно структурированы исходники. Если >подцепится очень много лишнего, можно применить более трудоемкий подход (выделить каждую >функцию своим ifdefом, и компилировать каждый файл столько раз, сколько в >нем есть функций, каждый раз со своим -D; со статическими функциями >будут отдельные сложности). Насчет отдельных сложностей: а какие (навскидку) ешшо могут быть ньюансы, явно выпадающие из общего сценария? >Если очень хочется полной автоматизации, то потренироваться руками, а потом запихать все >в скрипт. Очень хочется полной автоматизации :) Но это уже ко мне, буду питонить....
|