2014-11-02 3 views
0

Я разрабатываю для встроенной системы, что означает, что я должен использовать скрипт компоновщика. Это неважно. Я начинаю со следующим правилом Make, чтобы связать все вместе:Добавление зависимостей к правилу без добавления зависимостей к общему списку

$(RELEASETARGET) : $(OFILES) 
    $(LD) -Tlinker_script.ld --entry ResetISR --gc-sections $(LIBDIR) -o [email protected] $^ $(LIB) 

Как вы можете видеть, эта строка содержит ошибку: linker_script.ld является зависимость этого правила, но не упоминается в зависимости. Но если я просто добавить его в конце DEPS:

$(RELEASETARGET) : $(OFILES) linker_script.ld 
    $(LD) -Tlinker_script.ld --entry ResetISR --gc-sections $(LIBDIR) -o [email protected] $^ $(LIB) 

Он также будет добавлен в список после -o и программа не запустится на устройстве.

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

Итак, как мне добавить эту зависимость, не добавляя ее в список .o-файлов?

+1

Почему бы просто не использовать '$ (OFILES)' вместо '$^'? –

ответ

0

Проще всего использовать $(OFILES), как упоминалось в @Banthar. Если вы не хотите делать, что вы можете использовать filter вернуть только объектные файлы:

$(LD) ... -o [email protected] $(filter %.o,$^) $(LIB) 
Смежные вопросы