Quando tenho uma tarefa de criação em que um destino específico precisa ser criado antes de outro, enquanto no modo paralelo, isso é simples ao usar o SunPro Make (dmake). O seguinte makefile:
install: dir dir/file
dir:
mkdir dir
dir/file:
cp source dir/file
pode ser tornado paralelo, tornando seguro, alterando a primeira linha para:
install: dir .WAIT dir/file
ou usando:
.NO_PARALLEL: install
O restante do makefile ainda será tratado no modo paralelo e até mesmo uma lista de destinos à esquerda ou à direita .WAIT
será tratada no modo paralelo.
Veja: http://schilytools.sourceforge.net/man/man1/make.1s.html e http://schilytools.sourceforge.net/man/man1/dmake.1.html
mas o GNU make não parece ter uma opção semelhante. Não há realmente nenhuma maneira de fazer isso com o GNU make?
Para ser mais específico, a solução precisa ser escrita de forma a permitir que o makefile seja processado com outras implementações make.
O alvo especial .WAIT pode, por exemplo, estar em uma macro dependente de programa chamada, por exemplo, $(WAIT)
Observe que há uma solução aparente que não ajuda:
Em teoria, pode-se criar dir
uma dependência de dir/file
para impor a criação dir
antes de tentar copiar para, dir/file,
mas se você copiar outro arquivo posteriormente, dir,
isso o tornará dir
mais novo que dir/file
. Como resultado, chamar make
mais de uma vez copiaria para dir/file
repetidamente, sem o resultado esperado de make
fazer a cópia apenas no caso de a fonte se tornar mais recente quedir/file.
Isso levanta a questão alternativa de saber se pode haver uma topologia de dependências que obriga make
a criar dir
antes de copiar dir/file
sem fazer dir
uma dependência dedir/file.