problema de dependência com o GNU make
-
06-09-2019 - |
Pergunta
Eu estou enfrentando um problema muito estranho com o make. Meu arquivo make contém:
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: ...
.....
Agora, "make -f Makefile item1
" obras, mas quando eu tento "make -f Makefile all
" ele não funciona. Você pessoas vêem nenhum problema em meu makefile?
Graças
Adenda :
Bem, parece que faz não permite alvos que têm mesmo nome de algum diretório no nível atual. Observação:
- "todos" é um diretório @ $ (HOME) / apps
-
all1: item1 item2
funciona -
all: item1 item2
não trabalho
Assim, qualquer nome de destino ter mesmo nome de um diretório parece falhar (como, deixa de fazer alguma coisa útil).
Eu tenho certeza que eu estou fazendo algo absurdamente errado aqui.
Solução
Quando você escreve:
all: item1 item2
e, em seguida, make all
pedido, que conta make
:
- Encontre um sistema de arquivos objeto chamado
all
e certificar-se de qualquer coisa que depende (item1
,item2
) é até à data. - Se
all
não existe ou está desatualizado w.r.t quer do sistema de arquivos objetos chamadositem1
ouitem2
, em seguida, fazer as ações especificadas (nenhum neste exemplo) e, em seguida, considerarall
até à data. - Se
all
é um diretório, ele existe. Se ele foi modificado recentemente, será atualizado.
A sugestão de uso .PHONY: all item1 item2
é bom para o GNU make; ele não funciona com outras variantes de make
.
Não use nomes de destino que são nomes de diretório - a menos que você tem certeza que sabe o que está fazendo. E uso .PHONY
.
Outras dicas
Tente -falso declarando seu todos- -alvo.
Bem parece make não permite alvos que têm mesmo nome de algum diretório no nível atual. Observação:
- "todos" é um diretório @ $ (HOME) / apps -all1 / 2/3: item1 item2 obras -todos: item1 item2 não funciona assim é a qualquer nome de destino tendo mesmo nome que o diretório
.Eu tenho certeza que eu estou fazendo nada absurdamente errado aqui.