Existe uma maneira conhecida de fazer com que o Linux make
rejeite o uso não intencional de extensões específicas do GNU ‑ Make no Makefile ao editar ou usar o Makefile de outros no Linux? Quero dizer, restringir o GNU ‑ Make para se comportar como make
especificado no POSIX e rejeitar quaisquer extensões específicas do GNU ‑ Make?
O .POSIX
alvo especial não é suficiente, de acordo com “ 4.9 Nomes Especiais de Alvos Internos (gnu.org) ”. A página do manual não menciona uma opção de linha de comando para isso.
O uso de outro make
utilitário pode ser uma opção.
- Atualização 2018-10-19 -
Ainda não encontrei uma resposta direta à minha pergunta, mas aqui está pelo menos um documento sobre esse problema, um documento que não existia no momento em que eu tinha essa pergunta: Um Tutorial sobre Makefiles Portáteis (nullprogram.com) .
make
que foi planejado para uso com o "outro Makefile" em questão. Você também disse que o ".POSIX
destino do GNU não é suficiente, de acordo com" sua leitura de alguma documentação, mas você não demonstrou isso com um caso real, o que é um pouco problemático em relação ao XY .Respostas:
Tenho certeza de que não há como desativar as extensões de criação do GNU. O
.POSIX
destino melhora a compatibilidade, mas não desativa extensões compatíveis, como funções, destinos de pontos proprietários,%
padrões em destinos, etc.Não conheço nenhuma implementação make que atenda aos recursos do POSIX. Por exemplo, MINIX, Solaris, OpenBSD, todos têm suas próprias extensões. Você poderia pelo menos tentar criar seus programas com essas quatro implementações (assumindo que seus programas se baseiam em todas essas plataformas), o que lhe dará uma garantia de portabilidade muito boa na prática. Adicione o Windows com o
make
utilitário do Visual Studio, além de uma porta de algumas ferramentas de shell do Unix, se você puder usar um sistema operacional não livre (acho que há uma versão gratuita do VS que seria suficiente).fonte
pmake
para testar a portabilidade de meus makefiles. Alega que é criar sabor do NetBSD. (Em versões mais recentes do Debian ébmake
.)