2012-06-25 22 views
8

Ho trovato le seguenti righe in un'esercitazione makefile, ma ho qualche problema con le linee in grassetto.Che cosa significa jolly nel makefile?

in 1 linea, se scrivo

program_C_SRCS:=$(*.c) 

non funziona. Quindi, per favore dimmi cosa fa la parola jolly qui. Questa parola è specifica solo per il makefile?

Nel tutorial è scritto che la seconda riga eseguirà la sostituzione del test. Qualcuno può dirmi qualcosa su questa sostituzione di testo?

Per favore, scusami se le mie domande sono molto semplici perché sono nuovo per fare il filestuff.

link of tutorial

CC:=g++ 
program_NAME:=myprogram 
**program_C_SRCS:=$(wildcard *.c)** # 1 line 
program_CXX_SRCS:=$(wildcard *.cc) 
**program_C_OBJ:=$(program_C_SRCS:.c=.o)** # 2 line 
program_CXX_OBJ:=$(program_CXX_SRCS:.c=.o) 
program_OBJ:= $(program_C_OBJ) $(program_CXX_OBJ) 

risposta

10

Supponiamo di avere due file di origine. foo.c e bar.c.

program_C_SRCS:=$(wildcard *.c) # 1 line 

La funzione wildcard è fare sintassi. La variabile program_C_SRCS avrà ora il valore foo.c bar.c (forse non in questo ordine).

program_C_OBJ:=$(program_C_SRCS:.c=.o) # 2 line 

Questo è un substitution reference. Trasforma il testo, sostituendo una sottostringa con un'altra. La variabile program_C_OBJ ora ha il valore foo.o bar.o.

1

L'uso della funzione di scheda jolly nel file make è elencare tutti i file di origine con un'estensione particolare. Per esempio:

program_C_SRCS:=$(*.c) // In this the variable program_C_SRCS will have all the files with ".c" extension. 

Supponiamo che se si desidera convertire i file in .c.o file quindi la seguente sintassi può essere utile:

program_C_OBJS:=$(patsubst %.c,%.o,$(wildcard *.c))