Richard Jones (Richard WM Jones), autor , trabalhando na Red Hat, nova ferramenta de construção , destinada a corrigir falhas e problemas na ferramenta make, mantendo a simplicidade e clareza dos scripts. A ferramenta make foi projetada em 1976 e possui várias deficiências conceituais que se busca corrigir nos Objetivos, sem alterar a concepção geral.
Código-fonte dos Objetivos sob a licença GPLv2+.
:
- Apoio apenas a uma tática de resolução de dependências — "a instrução de construção é executada se o arquivo alvo estiver ausente ou for mais antigo que uma das dependências". Em Goals, pretende-se implementar outras táticas, como verificar a presença de URLs, comparar o tempo de modificação com qualquer arquivo, avaliar a construção do pacote em , comparar somas de verificação, executar conjuntos de teste com omissões seletivas de testes.
- Ao processar objetivos de construção, a ferramenta make não distingue entre arquivos e nomes de regras, resultando na falta de verificação se, ao executar uma regra, um arquivo que deveria ser criado realmente o é. Por exemplo, se existir uma regra chamada "test" que executa scripts de teste, e um arquivo com o nome "test" for criado por acaso, os testes deixarão de ser chamados, pois o make considerará que o alvo já foi construído e não precisa executar qualquer ação (para evitar esse problema no make, pode-se especificar a diretiva ".PHONY: test"). Goals separa claramente arquivos e nomes de regras.

- Problema de fornecer apenas um parâmetro para instruções de construção.

Nos Objetivos, sugere-se o uso de um número arbitrário de parâmetros nomeados. Por exemplo, pode-se destacar separadamente o indicador do arquivo de depuração do nome:

- Problemas de interação com o interpretador shell. Por exemplo, a necessidade de controlar a escape de espaços em nomes de arquivos e diretórios, o desperdício de recursos ao iniciar um interpretador shell separado para executar cada comando, a dupla interpretação do símbolo “$” (usado tanto no shell quanto no make), e a consideração de identações.
Os problemas mencionados são resolvidos em Goals utilizando o símbolo "%" em vez de "$" para variáveis de construção ("$" permanece apenas para shell), aplicando-se o parser , que requerem que os caminhos e nomes de arquivos sejam envolvidos em aspas e que os blocos de código sejam destacados com chaves. Todo o bloco é executado em uma única instância do shell de comando, e dentro do bloco, a formatação de código é livre, sem associação a espaços especiais.
Era:
target: foo.o bar.o
${CC} ${CFLAGS} $< -o $@Tornou-se:
«target»: «foo.o», «bar.o» {
LAGS <-o %@
}
Outras características dos Goals:
- Suporte opcional para a definição de nomes e parâmetros arbitrários:
goal all = : «target»
goal link =
«target» : «foo.o», «bar.o» { … }goal compile (name) =
«%name.o»: «%name.c», «dep.h» { LAGS -c $^ -o $@ } - Dois modos de execução: modo make para associar os objetivos de construção aos nomes de arquivos (por exemplo, o arquivo «foo.o» corresponde ao objetivo «%name.o»), e modo de execução direta de compilação:
goal all = : link
goal link =
«target» : «foo.o», compile («bar») { … }goal compile (name) =
«%name.o»: «%name.c», «dep.h» { LAGS -c $^ -o $@ } - A tática de construção é determinada por regras especiais que definem a necessidade de recompilação do objetivo de construção. Se houver um link à presença do arquivo, isso é definido explicitamente através do respectivo indicador («target» para o nome da regra e *file(«target») para a verificação do arquivo).
«target» : «foo.o», «bar.o» { … }
*file(«target») : *file(«foo.o»), *file(«bar.o») { … }
- O desenvolvedor pode definir indicadores arbitrários para táticas de construção. O indicador «*file» é definido por padrão (@{…} indica a supressão da saída, e «exit 99» sinaliza a necessidade de recompilação):
tactic *file (filename) = @{
test -f %filename || exit 99
for f in %Fonte: opennet.ru



