Normalmente paso las definiciones de macros de "make command line" a un "makefile" usando la opción: -Dname = value. La definición es accesible dentro del archivo MAKE.
También paso las definiciones de macro del "makefile" al "código fuente" usando la opción de compilador similar: -Dname = value (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 macros 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
luego directamente el código main.c puede ver var:
int main()
{
int i = var;
}
Respuestas:
Llame al
make
comando de esta manera:Y asegúrese de usarlo
$(CFLAGS)
en su comando de compilación en el Makefile. Como mencionó @ jørgensen, poner la asignación de variable después delmake
comando anulará elCFLAGS
valor ya definido en el Makefile.Alternativamente, puede establecer
-Dvar=42
otra variable queCFLAGS
y luego reutilizar esta variableCFLAGS
para evitar anular completamenteCFLAGS
.fuente
$(CFLAGS)
debería ser el último, de modo que cualquier opción especificada por un usuario anulará cualquier cosa que el Makefile establezca internamente. Eso significaría usar, por ejemplolocal_CFLAGS = -Wall $(CFLAGS)
. Por el contrario, si hay algo que realmente desea tener prioridad,$(CFLAGS)
colóquelo después , como en el comentario de @MadScientist.CFLAGS="-Dvar1=42 -Dvar2=314"
CPPFLAGS
podría representar un mejor ajuste queCFLAGS
oCXXFLAGS
: stackoverflow.com/a/53527858/2278206Solo usa una variable específica para eso.
fuente
Llamar a hacer de esta manera
porque desea anular el CFLAGS de su Makefile, y no solo el entorno (que tiene una prioridad menor con respecto a las variables de Makefile).
fuente
Debido a la baja reputación, no puedo comentar la respuesta aceptada.
Me gustaría mencionar la variable predefinida
CPPFLAGS
. Podría representar un mejor ajuste queCFLAGS
oCXXFLAGS
, ya que el manual GNU Make lo describe como:Ejemplos de reglas implícitas integradas que utilizan
CPPFLAGS
n.o
se hace automáticamenten.c
con una receta de la forma:$(CC) $(CPPFLAGS) $(CFLAGS) -c
n.o
se elabora automáticamente a partir den.cc
,n.cpp
on.C
con una receta de la forma:$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
Uno usaría el comando
make CPPFLAGS=-Dvar=123
para definir la macro deseada.Más información
fuente
fuente
Encuentre el archivo C y la implementación de Makefile a continuación para cumplir con sus requisitos
foo.c
Makefile
fuente