2013-10-13 4 views
0

Если я создаю один проект, содержащий множество подкаталогов и каждый из которых соответствует одному конкретному модулю, например A, B, C, D, E, F и исполняемым объектам E1, E2, E3 , Каждый модуль соответствует одному * .a, используемому исполняемой мишенью. Моя проблема заключается в том, как создавать зависимости между модулями и модулями и зависимости между модулями и исполняемыми целями. То есть, если E1 использует один файл A, тогда E1 должен зависеть от A, так как мне нужна ссылка A.a для создания E1.
Как мне создать свой Makefile для создания такого типа зависимости? Спасибо, и я новичок в Makefile.Makefile с несколькими каталогами/зависимость модуля

+0

Вы спрашиваете, как написать правило для E1, чтобы A.a является обязательным условием E1? – Beta

+0

Да, но я надеюсь создать это правило автоматически, вместо того, чтобы писать его сам, если я ошибаюсь в этой зависимости. Это возможно? Или я просто хочу знать, как писать Makefile в большом проекте, содержащем несколько библиотек и исполняемых файлов, в которых каждый исполняемый файл зависит от некоторых из lib. Я думал, что он будет подвержен ошибкам при написании этих зависимостей вручную. спасибо – user2875245

+0

Эти зависимости можно обрабатывать автоматически, но это сложно. На каком языке вы используете? И есть ли у вас разумное соглашение об именах (например, «A/A.a')? – Beta

ответ

0

Я предполагаю, что вы используете GNU Make. Вы должны определить «консервированный рецепт», который инкапсулирует, как вы переходите от библиотек к исполняемому файлу. Рецепт должен использовать «автоматические переменные», чтобы он не зависел от конкретных файлов. Поскольку это только один рецепт, он отлаживается один раз, а затем может использоваться без дополнительных ошибок.

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

Приведенный ниже пример.

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

Обратитесь к руководству по GNU, чтобы ознакомиться со всеми условиями, необъяснимыми здесь.

define recipe= 
link [email protected] $(filter %.a, $^) 
endef 

E1: A.a (other prerequisites) 
    $(recipe) 
Смежные вопросы