2009-02-25 6 views
2

У меня возникла довольно странная проблема с make. Мой файл содержит Марка:Зависимость проблемы с gnu 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-файле?

Благодаря


Добавление:

Ну, это выглядит как макияж не позволяет цели, которые имеют такое же имя, как какой-нибудь каталог на текущем уровне. Наблюдение:

  • "все" является каталогом @ $ (HOME)/приложения
  • all1: item1 item2 работы
  • all: item1 item2 не работает

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

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

+0

Какое сообщение об ошибке? –

+0

make: ничего не нужно делать для 'all '. – 2009-02-25 14:24:41

+0

Не удается сделать что-нибудь полезное - вроде. Каталог существует; если он был последним изменен (файл добавлен или удален), поскольку последние изменения были изменены, нет ничего, что необходимо сделать, чтобы обновить его. Хороший совет - не использовать имя каталога в качестве цели. –

ответ

3

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

all: item1 item2 

, а затем запросить make all, что говорит make:

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

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

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

0

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

- "все" является каталогом @ $ (HOME)/приложения -all1/2/3: item1 item2 работы -all: item1 item2 не работает так это любое имя цели, имеющие одинаковый имя как каталог.

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

+0

Пожалуйста, добавьте дополнительную информацию к вопросу. Я сделал это для вас; теперь удалите это. Благодарю. –

Смежные вопросы