utilizar make instalar entre ejecutar diferencia como comando archivos makefile

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]