Escreva um Makefile para compilar os arquivos .c de cada diretório em seus respectivos arquivos executáveis

O processo de escrever um Makefile é o seguinte:

  1. Definir variáveis: defina variáveis ​​como compilador e opções de compilação.
  2. Definir arquivo de destino: Defina o nome do arquivo de destino.
  3. Definir arquivos de origem: Defina todos os arquivos de origem.
  4. Definir regras: Defina as regras para compilar cada arquivo de origem em um arquivo objeto.
  5. Definir pseudo-destino: Define um pseudo-destino que limpa arquivos objeto e outros arquivos intermediários.

A seguir está um exemplo de Makefile, assumindo que cada diretório tem um .carquivo fonte terminando com que precisa ser compilado no arquivo executável correspondente:

CC = gcc
CFLAGS = -Wall -Wextra -Werror
SRCDIRS = src1 src2 src3

TARGETS := $(patsubst %, %/target, $(SRCDIRS))

all: $(TARGETS)

%/target: %/*.c
	$(CC) $(CFLAGS) $^ -o $@

.PHONY: clean
clean:
	find . -name target -type f -delete
  • CC Define o compilador usado, gcc é usado aqui.
  • CFLAGS As opções de compilação são definidas e algumas opções de aviso são habilitadas aqui.
  • SRCDIRS Define o diretório onde residem todos os arquivos de origem.
  • TARGETS é uma lista de todos os arquivos executáveis, usando a função patsubst para substituir o caminho do arquivo de origem pelo caminho do arquivo executável.
  • all: $(TARGETS)Indica que tudo depende de todos os arquivos executáveis, e $ make todos os arquivos executáveis ​​podem ser gerados digitando na linha de comando.
  • %/target: %/*.cIndica uma regra, compila todos os arquivos de um diretório .c nos arquivos executáveis ​​correspondentes e os armazena em um targetarquivo nomeado no diretório.
  • .PHONY: cleanIndica que clean é um pseudo-alvo, não um arquivo real, e todos os arquivos executáveis ​​podem ser excluídos digitando na linha de comando. onde o comando é usado para localizar o arquivo nomeado e excluí-lo. $ make cleanfind target

Acho que você gosta

Origin blog.csdn.net/FLM19990626/article/details/130983397
Recomendado
Clasificación