Linux: o makefile gnu
No Linux, um makefile
é um arquivo de texto que descreve quais arquivos são necessários para construir um programa específico, bem como a forma de compilar e vincular os arquivos para construir o programa. Para um programa Linux composta de vários arquivos de origem e de cabeçalho, o makefile especifica o seguinte:Os itens que faço cria - geralmente os arquivos objeto e o executável. Usando o termo alvo para se referir a qualquer item que fazer tem que criar é comum.
Os arquivos ou outras ações necessárias para criar o alvo.
Que comanda a executar para criar cada alvo.
Suponha que você tenha um arquivo de origem C ++ chamado form.C que contém a seguinte diretiva de pré-processamento:
#incluir "Form.h" // Incluir arquivo de cabeçalho
O arquivo de objeto form.o claramente depende do arquivo de origem form.C eo arquivo de cabeçalho Form.h. Além dessas dependências, você deve especificar como faço converte a form.C arquivo para o arquivo objeto form.o. Suponha que você queira faço invocar g ++ (porque o arquivo de origem está em C ++) com estas opções:
-c (Apenas compilar)
-g (Gerar informações de depuração)
-O2 (Optimizar alguns)
No makefile, você pode expressar essas opções com a seguinte regra:
Video: Compilar con make código C y C++ en GNU/Linux
# Este um comentário no makefile # As linhas seguintes indicam como form.o depende # no form.C e Form.h e como criar form.o.form.o: form.C form.hg ++ -c -g -O2 form.C
Neste exemplo, a primeira linha mostra noncomment form.o como o alvo e form.C e Form.h como os arquivos dependentes.
A linha a seguir a dependência indica como construir o alvo de seus dependentes. Esta linha deve começar com uma guia. Caso contrário, o faço comando sai com uma mensagem de erro, e você está coçando a cabeça, porque quando você olha para o makefile em um editor de texto, você não pode dizer a diferença entre uma guia e um espaço.
Agora que você sabe o segredo, a correção é para substituir o espaço no início da linha ofensiva com uma única guia.
Video: C Programming: Makefiles
A vantagem de usar make é que ele impede compilações desnecessárias. Afinal, você pode executar g ++ (ou gcc) A partir de um shell script para compilar e ligar todos os arquivos que compõem o aplicativo, mas o shell script compila tudo, mesmo que as compilações são desnecessárias.
GNU faço, por outro lado, baseia-se um alvo somente se um ou mais dos seus dependentes tenham mudado desde a última vez que o alvo foi construído. faço verifica esta mudança examinando a hora da última modificação do alvo e os dependentes.
faço trata o destino como o nome de uma meta a ser achieved- o alvo não tem que ser um arquivo. Você pode ter uma regra como esta:
clean: rm -f * .o
Esta regra especifica um alvo abstrato chamado limpar limpo que não depende de nada. Esta declaração de dependência diz que para criar o alvo limpar limpo, GNU faço chama o comando rm -f * .o, que apaga todos os arquivos que têm a .o extensão (ou seja, os arquivos objeto). Assim, o efeito de criar o alvo chamado limpar limpo é excluir os arquivos objeto.