LINUX.ORG.RU

Несколько прог из одних исходников


0

0

В общем ситуация такая: пишу на чистом си. Есть несколько проектов управляющих программ, которые по структуре одинаковые. Разница в основном в наличии/отсутствии/переделке некоторых функций и назначении #define-ов.

Естественно возникает желание собирать все из одних исходников. Но проблема в том, что стандартное #ifdef.... #elif ... #endif в данном случае не очень подходит. Так как отличаться мтогут куски по 20-40 стрк. Читать такое невозможно для числа программ больше 2. Да и для двух не сильно приятно.

Есть идеи как это организовать?

★★★★

Мне кажется, что можно и #ifdef.
Просто наверное надо правильно раскидать отличающиеся куски по файлам.
Ну т.е., выделить отличающиеся куски, и обернуть их в #ifdef.
Тем более, что относительно небольшой код отличается. Было бы неэффективно
разносить большое количество кода.
Посмотри, например, как сделано для ядра. Ведь там много архитектур,
и все они как-то работают с использованием #define. :)

RomanU
()

Multiple view of project, clone nodes of leo!

lg ★★
()

Можно в зависимости от argv[0] выбирать как будет проходить исполнение программы. Обозвать например copy - делать копирование, если move - переместить. Короче говоря выбирать путь исполнения в какойто точке или точках в main().

SatanClaus ★★★
()

А еще можно в те же #ifdef заворачивать #include с нужным фрагментом кода

вариант с определением argv[0] - тоже неплох (лично мне он больше нравится).

k_andy ★★★
()

Почитай исходники coreutils -- там именно дефайнами разрулено

Zulu ★★☆☆
()

M4 возьми, да?

anonymous
()

2alexru:

IMHO в такой ситуации ( "...отличаться мтогут куски по 20-40 строк...") надо пересматривать общую архитектуру кода, выделяя длинные куски в отдельные процедуры, распиханные по разным файлам. А в мэйкфайле для разных целей писать слегка разные списки объектных файлов. (разумеется, от #ifdef'ов полностью не избавиться).

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