versiones guia español actualizar c macros makefile

c - guia - qgis español



¿Cómo pasar la definición de macro desde los argumentos de línea de comando "make"(-D) al código fuente C? (5)

Por lo general, paso las definiciones de macros de "make command line" a "makefile" usando la opción: -Dname = value. La definición es accesible dentro del archivo MAKE.

También paso las definiciones de macro del "archivo MAKE" al "código fuente" usando la opción del compilador similar: -Dombre = valor (compatible con muchos compiladores). Esta definición es accesible en el código fuente.

Lo que necesito ahora es permitir que el usuario de mi archivo MAKE pueda pasar definiciones de macro arbitrarias de la "línea de comandos make.exe" al "código fuente" de inmediato, sin tener que cambiar nada en el archivo MAKE.

para que el usuario pueda escribir: make -f mymakefile.mk -SOMEOPTION var = 5

entonces directamente el código main.c puede ver var:

int main() { int i = var; }


Encuentre el archivo C y la implementación Makefile a continuación para cumplir con sus requisitos

foo.c

main () { int a = MAKE_DEFINE; printf ("MAKE_DEFINE value:%d/n", a); }

Makefile

all: gcc -DMAKE_DEFINE=11 foo.c


Llamar make comando de esta manera:

make CFLAGS=-Dvar=42

Y asegúrese de usar $(CFLAGS) en su comando de compilación en el Makefile. Como se mencionó en @ jørgensen, poner la asignación de variable después del comando make anulará el valor de CFLAGS que ya definió Makefile.

Alternativamente, puede establecer -Dvar=42 en otra variable que CFLAGS y luego reutilizar esta variable en CFLAGS para evitar anular por completo CFLAGS .


Llamar de esta manera

make CFLAGS=-Dvar=42

porque desea anular las CFLAGS de su archivo Makefile, y no solo el entorno (que tiene una prioridad menor con respecto a las variables Makefile).


Solo usa una variable específica para eso.

$ cat Makefile all: echo foo | gcc $(USER_DEFINES) -E -xc - $ make USER_DEFINES="-Dfoo=one" echo foo | gcc -Dfoo=one -E -xc - ... one $ make USER_DEFINES="-Dfoo=bar" echo foo | gcc -Dfoo=bar -E -xc - ... bar $ make echo foo | gcc -E -xc - ... foo


$ cat x.mak all: echo $(OPTION) $ make -f x.mak ''OPTION=-DPASSTOC=42'' echo -DPASSTOC=42 -DPASSTOC=42