Diferencia entre CPPFLAGS y CXXFLAGS en GNU Make


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 ++.


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 ).


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í .


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.