Diferencia entre CPPFLAGS y CXXFLAGS en GNU Make

139

¿Cuál es la diferencia entre CPPFLAGS y CXXFLAGS en GNU Make?

Paul Robinson
fuente
2
Puede hacer que imprima sus variables predefinidas y la base de datos de reglas usando la invocaciónmake -p
Daniele Pallastrelli

Respuestas:

210

CPPFLAGSse supone que es para banderas para el procesador C P re P ; CXXFLAGSes para banderas para el compilador de C ++.

Las reglas predeterminadas en make (en mi máquina, en cualquier caso) pasan CPPFLAGSa casi todo, CFLAGSsolo se pasan al compilar y vincular C, y CXXFLAGSsolo al compilar y vincular C ++.

Kieron
fuente
1
Parece una práctica común que CFLAGS también se pasaría al compilar C ++?
Baiyan Huang
21
Decir ah. ¡Lo entiendo! El xestá +activado porque C++FLAGSexplotaría el compilador. ... Puede que haya llegado tarde a la fiesta, pero eso es aún mejor que llegar a tiempo a la fiesta equivocada.
Jacksonkr
@BaiyanHuang No lo pensaría como algo común o no; te encontrarás con ambas convenciones. Tienes que saber qué está haciendo tu configuración actual.
James Moore el
1
CPPFLAGSNO es para C P lus P lus pero CXXFLAGS es.
shizhen
Cierto pero terrible. Esto se siente como si estuviéramos atrapados en los años 80.
shuhalo
34

Por defecto, CPPFLAGSse le dará al preprocesador de C, mientras que CXXFLAGSse le dará al compilador de C ++.

El Manual de creación de GNU es un buen recurso para preguntas como esta (ver Variables implícitas ).

Christoph
fuente
27
Estaba mirando directamente el manual cuando tenía exactamente la misma pregunta. Escribí CPPFLAGS en stackoverflow y obtuve la respuesta mucho más rápido que buscando el manual.
Dan Hook
18

CPPFLAGS son para el preprocesador de C, mientras que CXXFLAGS son para el compilador de C ++.

Ver aquí .

starblue
fuente
0

Por defecto, están configurados para algo.

En la práctica, necesita saber qué hace cada proyecto. Prácticamente nadie usa esos valores predeterminados integrados en make, y si confía en, por ejemplo, CPPFLAGS que significa "banderas para el preprocesador C", encontrará que el proyecto que le interesa lo ha usado para significar "banderas para el compilador de C ++" en lugar. ¿Y se pasa el indicador CFLAGS a las líneas de compilación de C ++? Algunas veces. No siempre. Etc, etc., etc.

James Moore
fuente
1
Algunos proyectos usan CPPFLAGS para significar "banderas de c ++", pero esos proyectos casi definitivamente lo hacen por ignorar el estándar, y sería mejor si usaran CXXFLAGS.
Score_Under
@Score_Under No estoy en desacuerdo con usted, pero el mundo está lleno de proyectos que no podrían importarle menos lo que cualquiera piense que es el estándar. Usted siempre tiene que investigar.
James Moore