instalar - ¿Cómo compilar diferentes archivos c con diferentes CFLAGS usando Makefile?
instalar archivos makefile (3)
El enfoque adoptado por el sistema de compilación de Linux kernel:
CFLAGS += $(CFLAGS-$@)
Y entonces,
CFLAGS-A.o += -DEXTRA
CFLAGS-B.o += -DEXTRA
todas. Digamos que tengo un programa que contiene una larga lista de archivos fuente C, Ac, Bc, ...., Zc, ahora quiero compilar Ac, Bc con ciertos CFLAGS, y compilar el resto de los archivos fuente con un archivo diferente. Valor de CFLAGS
¿Cómo escribir un Makefile para hacer el trabajo descrito anteriormente? Actualmente, lo que estoy haciendo en mi Makefile es:
OBJ=[all other .o files here, e.g. D.o, D.o, E.o .... Z.o]
SPECIAL_OBJS=A.o B.o
all: $(OBJ) $(SPECIAL_OBJS)
$(SPECIAL_OBJS):
@echo [Compiling]: $(@:.o=.c)
$(CC) [SOME OTHER GCC OPTIONS HERE] $(CFLAGS) -c $(@:.o=.c) -o $@
%.o: %.c
@echo [Compiling]: $<
$(CC) $(CFLAGS) -o $@ -c $<
Funciona, pero parece simplemente estúpido / complicado. ¿Alguien puede ayudar a señalar cuál es la forma recomendada de hacer esto en Makefile? ¡Gracias!
Intenta usar variables específicas del objetivo. Una variable específica del objetivo se declara así:
TARGET: VAR := foo # Any valid form of assignment may be used ( =, :=, +=, ?=)
Ahora cuando se está haciendo el objetivo llamado TARGET, la variable llamada VAR tendrá el valor "foo".
Utilizando variables específicas del objetivo, puede hacer esto, por ejemplo:
OBJ=[all other .o files here, e.g. D.o, D.o, E.o .... Z.o]
SPECIAL_OBJS=A.o B.o
all: $(OBJ) $(SPECIAL_OBJS)
$(SPECIAL_OBJS): EXTRA_FLAGS := -std=c99 # Whatever extra flags you need
%.o: %.c
@echo [Compiling]: $<
$(CC) $(CFLAGS) $(EXTRA_FLAGS) -o $@ -c $<
No puedo responder la pregunta sobre makefiles en bruto, pero si está dispuesto a usar automake es trivial:
foo_CFLAGS = [options passed to CC only when building foo]