在编译nginx 时,顺便查了下编译优化的参数,留个笔记。这里说的都是gcc


./configure

--with-cc-opt="%{optflags} $(pcre-config --cflags)"


下面是make优化:


make %{?_smp_mflags}

通常优化


make %{?_smp_mflags} CFLAGS="-O3 -g -mtune=generic -m64"

i386/x86_64通用CPU,gcc 最高级别优化,64位专用


make %{?_smp_mflags} CFLAGS="-O3 -g -mtune=native -m64"

探测本地CPU,gcc最高级别优化,本地64位专用,不可移植。


make %{?_smp_mflags} CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"

红帽参数,$RPM_OPT_FLAGS通常是-02 -g


发行商为了二进制文件的可移植性,以及在不同机器上的兼容性,-mtune=native -m64 这样的参数肯定是没加的,事实上这些参数可以略微提高二进制文件的执行性能。


如果是通过srpm编译来获得软件包,完全可以定制编译。


注:对于C++,请把 CFLAGS 替换为 CXXFLAGS 。


另外,打包时,安装软件包redhat-rpm-config 很有必要。它预设了一些环境,会自动根据你的环境进行优化,详见 /usr/lib/rpm/rpmrc和 /usr/lib/rpm/redhat/rpmrc


参考文档

http://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options