Diferença entre CPPFLAGS e CXXFLAGS no GNU Make

139

Qual é a diferença entre CPPFLAGS e CXXFLAGS no GNU Make?

Paul Robinson
fonte
2
Você pode obter make para imprimir suas variáveis e regras predefinidas banco de dados usando a invocaçãomake -p
Daniele Pallastrelli

Respostas:

210

CPPFLAGSé suposto ser para bandeiras do C P re P rocessor; CXXFLAGSé para sinalizadores para o compilador C ++.

As regras padrão no make (na minha máquina, de qualquer forma) passam CPPFLAGSpara praticamente tudo, CFLAGSsão passadas apenas ao compilar e vincular C e CXXFLAGSsão passadas apenas ao compilar e vincular C ++.

Kieron
fonte
1
parece uma prática comum que os CFLAGS também sejam aprovados ao compilar C ++?
Baiyan Huang
21
Ha. Entendi! o xé um +girou sobre ela do lado, porque C++FLAGSiria explodir o compilador. ... Posso ter chegado tarde à festa, mas ainda é melhor do que chegar a tempo da festa errada.
22916 Jacksonkr
@BaiyanHuang Eu não pensaria nisso como comum ou não; você encontrará as duas convenções. Você precisa saber o que sua configuração atual está fazendo.
James Moore
1
CPPFLAGSNÃO é para C P lus P lus, mas CXXFLAGS é.
shizhen 20/02/19
Verdadeiro, mas terrível. Parece que estamos presos nos anos 80.
shuhalo 19/09/19
34

Por padrão, CPPFLAGSserá fornecido ao pré-processador C, enquanto CXXFLAGSserá fornecido ao compilador C ++.

O GNU Make Manual é um bom recurso para perguntas como esta (consulte Variáveis ​​implícitas ).

Christoph
fonte
27
Eu estava olhando diretamente para o manual quando tive exatamente a mesma pergunta. Digitei CPPFLAGS no stackoverflow e obtive a resposta muito mais rapidamente do que pesquisar no manual.
11119 Dan Hook
18

CPPFLAGS são para o pré-processador C, enquanto CXXFLAGS são para o compilador C ++.

Veja aqui .

starblue
fonte
0

Por padrão, eles estão definidos para algo.

Na prática, você precisa saber o que cada projeto faz. Praticamente ninguém usa os padrões incorporados no make, e se você confiar, por exemplo, em CPPFLAGS, que significa "sinalizadores para o pré-processador C", você descobrirá que o projeto de seu interesse o usou para significar "sinalizadores para o compilador C ++" em vez de. E o sinalizador CFLAGS é passado para linhas de compilação C ++? As vezes. Nem sempre. Etc, etc, etc.

James Moore
fonte
1
Alguns projetos usam CPPFLAGS para significar "sinalizadores de c ++", mas esses projetos quase definitivamente o fazem por ignorância do padrão, e seria melhor se eles usassem CXXFLAGS.
Score_Under
@Score_Under Não discordo de você, mas o mundo está cheio de projetos que não se importam menos com o que alguém pensa que é o padrão. Você sempre tem que investigar.
James Moore