Makefile - Outros recursos
Neste capítulo, examinaremos vários outros recursos do Makefile.
Uso Recursivo de Make
Uso recursivo de make significa usar makecomo um comando em um makefile. Esta técnica é útil quando você deseja makefiles separados para vários subsistemas que compõem um sistema maior. Por exemplo, suponha que você tenha um subdiretório chamado `subdir 'que tem seu próprio makefile, e você gostaria que o makefile do diretório que o contém seja executadomakeno subdiretório. Você pode fazer isso escrevendo o código abaixo -
subsystem:
cd subdir && $(MAKE)
or, equivalently:
subsystem:
$(MAKE) -C subdir
Você pode escrever recursivo makecomandos apenas copiando este exemplo. No entanto, você precisa saber como eles funcionam e por que, e como o submarcar se relaciona com o fabricante de nível superior.
Comunicando Variáveis para uma Sub-Marca
Valores variáveis de nível superior makepode ser passado para a submarca por meio do ambiente por solicitação explícita. Essas variáveis são definidas no submarque como padrões. Você não pode sobrescrever o que é especificado no makefile usado pelo sub-make makefile a menos que use a opção `-e '.
Para transmitir ou exportar uma variável, makeadiciona a variável e seu valor ao ambiente para executar cada comando. O sub-make, por sua vez, usa o ambiente para inicializar sua tabela de valores de variáveis.
As variáveis especiais SHELL e MAKEFLAGS são sempre exportadas (a menos que você as cancele). MAKEFILES é exportado se você definir qualquer coisa.
Se você deseja exportar variáveis específicas para um sub-make, use a diretiva de exportação, conforme mostrado abaixo -
export variable ...
Se você quiser evitar que uma variável seja exportada, use a diretiva não exportar, como mostrado abaixo -
unexport variable ...
A Variável MAKEFILES
Se a variável de ambiente MAKEFILES for definida, makeconsidera seu valor como uma lista de nomes (separados por espaço em branco) de makefiles adicionais a serem lidos antes dos outros. Isso funciona de forma muito semelhante à diretiva include: vários diretórios são pesquisados para esses arquivos.
O principal uso de MAKEFILES é na comunicação entre invocações recursivas do make.
Incluindo arquivo de cabeçalho de diferentes diretórios
Se você colocou os arquivos de cabeçalho em diretórios diferentes e está executando makeem um diretório diferente, é necessário fornecer o caminho dos arquivos de cabeçalho. Isso pode ser feito usando a opção -I no makefile. Supondo que o arquivo functions.h esteja disponível na pasta / home / tutorialspoint / header e o restante dos arquivos esteja disponível na pasta / home / tutorialspoint / src /, então o makefile seria escrito da seguinte maneira -
INCLUDES = -I "/home/tutorialspoint/header"
CC = gcc
LIBS = -lm
CFLAGS = -g -Wall
OBJ = main.o factorial.o hello.o
hello: ${OBJ}
${CC} ${CFLAGS} ${INCLUDES} -o [email protected] ${OBJS} ${LIBS}
.cpp.o:
${CC} ${CFLAGS} ${INCLUDES} -c $<
Anexando mais texto às variáveis
Freqüentemente, é útil adicionar mais texto ao valor de uma variável já definida. Você faz isso com uma linha contendo `+ = ', como mostrado -
objects += another.o
Ele pega o valor dos objetos variáveis e adiciona o texto `outro.o 'a ele, precedido por um único espaço como mostrado abaixo.
objects = main.o hello.o factorial.o
objects += another.o
O código acima define objetos para `main.o hello.o factorial.o another.o '.
Usar `+ = 'é semelhante a:
objects = main.o hello.o factorial.o
objects := $(objects) another.o
Linha de continuação em Makefile
Se você não gosta de linhas muito grandes em seu Makefile, você pode quebrar sua linha usando uma barra invertida "\" conforme mostrado abaixo -
OBJ = main.o factorial.o \
hello.o
is equivalent to
OBJ = main.o factorial.o hello.o
Executando Makefile do Prompt de Comando
Se você preparou o Makefile com o nome "Makefile", simplesmente escreva make no prompt de comando e ele executará o arquivo Makefile. Mas se você deu qualquer outro nome para o Makefile, use o seguinte comando -
make -f your-makefile-name