Проблема с зависимостью от GNU Make - PullRequest
2 голосов
/ 25 февраля 2009

У меня довольно странная проблема с make. Мой файл make содержит:

all: item1 item2

item1: dep1 dep2
dep1:
    @echo
    cd $(HOME)/apps; /bin/rm -f $(D_ALL_OBJECTS) 
    cd $(SRCHOME)/fusionapps; make -k -f $(SOMEMAKEFILE) $(D_ALL_OBJECTS)
    @echo
dep2:
    @echo
    cd $(HOME)/apps; /bin/rm -f $(D2_ALL_OBJECTS) 
    cd $(SRCHOME)/fusionapps; make -k -f $(SOMEMAKEFILE) $(D2_ALL_OBJECTS)
    @echo
item2: ...
.....

Теперь "make -f Makefile item1" работает, но когда я пытаюсь "make -f Makefile all", это не работает. Вы, люди, видите проблемы в моем make-файле?

Спасибо


Добавление

Что ж, похоже, что make не допускает цели с тем же именем, что и некоторые каталоги на текущем уровне. Наблюдение:

  • "all" - это каталог @ $ (HOME) / apps
  • all1: item1 item2 работает
  • all: item1 item2 не работает

Таким образом, любое имя цели, имеющее то же имя, что и каталог, похоже, не работает (например, не может сделать что-нибудь полезное).

Я почти уверен, что делаю здесь что-то нелепо неправильное.

Ответы [ 3 ]

3 голосов
/ 25 февраля 2009

Когда вы пишете:

all: item1 item2

, а затем запрос make all, который сообщает make:

  • Найдите объект файловой системы с именем all и убедитесь, что все, от чего оно зависит (item1, item2), является актуальным.
  • Если all не существует или устарел по сравнению с любым из объектов файловой системы, называемых item1 или item2, то выполните указанные действия (в этом примере нет) и затем рассмотрите all до дата.
  • Если all - это каталог, он существует. Если он был недавно изменен, он будет обновлен.

Предложение использовать .PHONY: all item1 item2 хорошо для GNU Make; он не работает с другими вариантами make.

Не используйте целевые имена, которые являются именами каталогов - если вы не уверены, что знаете, что делаете. И используйте .PHONY.

1 голос
/ 25 февраля 2009

Попробуйте фальшивое объявление вашей цели.

0 голосов
/ 25 февраля 2009

Похоже, что make не позволяет целевым объектам, имя которых совпадает с именем некоторого каталога на текущем уровне. Наблюдение:

- «все» - это каталог @ $ (HOME) / apps -all1 / 2/3: item1 item2 работает -all: item1 item2 не работает, поэтому любое имя цели имеет то же имя, что и каталог.

Я почти уверен, что делаю здесь что-то нелепо неправильное.

...