CFLAGS,CXXFLAGS与CPPFLAGS的区别

太长不看版:  CFLAGS,CXXFLAGS是针对某语言的,CPPFLAGS是全语言通用的

 

 

编译C程序的隐式make规则是

%.o:%.c
    $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

其中

$()

语法扩展了变量。由于在编译器调用中使用了

CPPFLAGS

CFLAGS

,因此用于定义包含路径的是个人品味问题。例如,如果

foo.c

是当前目录中的文件

make foo.o CPPFLAGS="-I/usr/include"
make foo.o CFLAGS="-I/usr/include"

将以完全相同的方式调用您的编译器,即

gcc -I/usr/include -c -o foo.o foo.c

当你有多种语言需要相同的包含路径时,两者之间的区别就会发挥作用,例如,如果你有

bar.cpp

然后尝试

make bar.o CPPFLAGS="-I/usr/include"
make bar.o CFLAGS="-I/usr/include"

然后汇编将是

g++ -I/usr/include -c -o bar.o bar.cpp
g++ -c -o bar.o bar.cpp

因为C ++隐式规则也使用

CPPFLAGS

变量。 这种差异为您提供了一个很好的指导 - 如果您希望将标志用于所有语言,请将其放入

CPPFLAGS

,如果是针对特定语言将其放入

CFLAGS

CXXFLAGS

等。后一种类型的示例包括标准合规性或警告标志 - 您不希望将

-std=c99

传递给您的C ++编译器! 然后,您可能会在makefile中得到类似的结果

CPPFLAGS=-I/usr/include
CFLAGS=-std=c99
CXXFLAGS=-Weffc++
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值