O que significa o símbolo% em Makefile?

6

Estou brincando com makefiles e me deparei com %. o ou %. c . Pelo que entendi, ele especifica todos os arquivos c ou o . Mas por que esse trabalho:

%.o: %.c
        $(CC) -c $^  -o $@  

e isso não funciona

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

Ambas as expressões especificam todos os arquivos. Então, qual é o símbolo %. o: no make file?

    
por Mero 20.02.2017 / 16:50

2 respostas

6

Both expression specify all the files.

Não, a primeira regra informa make como obter um arquivo .o dado o arquivo .c correspondente. Observe o singular: um único arquivo.

A segunda regra (afirma) diz make como obter um monte de arquivos .o , dado outro monte de arquivos .c correspondentes. Observe o plural: todos os arquivos .c resultantes da *.c globbing.

Em uma nota lateral, %.o: %c é uma extensão do GNU.

Em outro lado, você não estará aprendendo como usar make no StackOverflow. Você deve considerar ler um livro.

    
por 20.02.2017 / 17:10
6

A construção:

%.o: %.c
        $(CC) -c $^  -o $@  

é uma regra padrão , que é um tipo da regra implícita. Ele especifica o um destino e um dependência e faz com que uma invocação de $(CC) para cada destino. Enquanto isso:

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

é uma regra padrão, mas tem (possivelmente) muitos destinos e muitas dependências. Ainda assim, só invocará $(CC) uma vez.

    
por 20.02.2017 / 17:10

Tags