2011-09-26 18 views
1

在Arch Linux的PKGBUILD的冲浪浏览器,有:CPPFLAGS在config.mk

sed -i 's/CPPFLAGS =/CPPFLAGS +=/g' config.mk 
sed -i 's/CFLAGS =/CFLAGS +=/g' config.mk 
sed -i 's/LDFLAGS =/LDFLAGS +=/g' config.mk 

为什么必须将国旗从

CPPFLAGS = -DVERSION=\"${VERSION}\" 

改为

CPPFLAGS += -DVERSION=\"${VERSION}\" 

我已经看过谷歌,但没有看到任何关于这件事。有人可以请解释并告诉我在哪里阅读更多关于这些标志?

回答

1

我做了很多谷歌搜索,发现这种模式(Surf的是here)似乎在Arch Linux PKGBUILD文件中相当常见。另一个例子是DWM's PKGBUILD

显然它正在修补config.mk文件,因此当make被调用时,这些值被附加到标志而不是覆盖标志(必须已经在别处设置)。所以必须保留现有的设置。这似乎只是由包构建者默认完成的,所以很难找到原因。

进一步看,我发现关于DWM的config.mk文件,其中笔者注意到,该文件的版本覆盖国旗在makepkg.conf设置这是main configuration file for makepkg,这使得每台机器调整编译设置this bug report。这似乎是你找到的一个合理的解释。从这个页面上,CFLAGS默认值将是这样的:

CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe" 

所以修补config.mk文件将建立包的时候会导致以下情况:

CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -std=c99 -pedantic -Wall -Os -I. ....." 
+0

谢谢@Ben斯科特。我赞成你的回答,因为我没有享有盛誉的声誉。但我不明白“将值附加到标志上,而不是仅仅设置标志。”但它给了我更多的谷歌,谢谢。 – Edouard

+0

@Edouard我扩大了我的答案一点,以解释什么是附加 –

+1

@ Edouard:见http://www.gnu.org/s/hello/manual/make/Appending.html – reinierpost