优化GCC参数介绍
优化GCC参数介绍
gcc比较重要的编译选项:
-w 禁止输出警告消息
-Wall 显示所有的警告消息
-ansi 按照ANSI标准编译程序,但并不限制与标准并不冲突的GNU扩展(一般不用该选项)
-std=<name> 指定C语言的标准(c89,c99,gnu89),该选项禁止了GNU C的扩展关键字asm,typeof,inline (一般不用该选项)
-static 连接器将忽略动态连接库,同时通过将静态目标文件直接包含到结果目标文件完成对所有引用的解析。
-static 连接器将忽略动态连接库,同时通过将静态目标文件直接包含到结果目标文件完成对所有引用的解析。
-pipe 使用管道而不是临时文件一个阶段到另一个阶段交换输出的方式,可以加快编译速度。建议使用。
-I<dir> 指定搜索系统头文件的目录,可以重复使用多个该选项指定多个目录。
gcc使用的环境变量
CFLAGS和CXXFLAGS(其实是Autoconf的环境变量)
LIBRARY_PATH 连接程序将在这些目录中寻找特殊的连接程序文件。
LD_LIBRARY_PATH该环境变量不影响编译程序,但是程序运行的时候会有影响:程序会查找该目录列表以寻找共享库。当不能够在编译程序的目录中找到共享库的时候,执行程序必须设置该环境变量。
LD_RUN_PATH 该环境变量不影响编译程序,但是程序运行的时候会有影响:它在运行时指出了文件的名字,运行的程序可以由此得到它的符号名字和地址。
GCC_EXEC_PREFIX 编译程序执行所有子程序的名字的前缀,默认值是"<prefix>/lib/gcc-lib/",
其中的<prefix>是安装时configure脚本指定的前缀。
其中的<prefix>是安装时configure脚本指定的前缀。
LANG指定编译程序使用的字符集,可用于创建宽字符文件、串文字、注释;默认为英文。[目前只支持日文"C-JIS,C-SJIS,C-EUCJP",不支持中文]
LC_ALL指定多字节字符的字符分类,主要用于确定字符串的字符边界以及编译程序使用何种语言发出诊断消息;默认设置与LANG相同。中文相关的几项:"zh_CN.GB2312 , zh_CN.GB18030 , zh_CN.GBK , zh_CN.UTF-8 , zh_TW.BIG5"
示例:QT宏Debug与Release差异
debug:
CXXFLAGS =-pipe -Wall -W -g-DQT_SHARED -DQT_NO_DEBUG -DQT_THREAD_SUPPORT
release:
CXXFLAGS = -pipe -Wall -W -O2 -g -pipe -m32 -march=i386 -mtune=pentium4-DQT_NO_DEBUG -
DQT_SHARED -DQT_THREAD_SUPPORT
优化参数:02, m32 march=i386 mtune=pentium4
★ -O 优化级别,,-O0表示没有优化,-O1为缺省值,-O3优化级别最高,-02是最安全的优化参数(集合);桌面可以使用"-03"
★ -m32
★ -m64Generate code for a 32-bit or 64-bit environment. The 32-bit environment sets int, long and pointer to 32 bits. The64-bit environment sets int to 32 bits and long and pointer to 64 bits.
★ march=i386 根据系统架构进行优化
★ mtune=pentium4表示为特定的cpu类型编译二进制代码,
Intel通常是:pentium2, pentium3, pentium3m, pentium4, pentium4m, pentium-m, prescott, nocona; AMD通常是:k6, k6-2, k6-3, athlon, athlon-tbird, athlon-xp, athlon-mp, opteron, athlon64, athlon-fx
说明:pentium3m/pentium4m是笔记本用的移动P3/P4;pentium-m是迅驰I/II代笔记本的cpu;prescott是带SSE3的P4(以滚烫到可以煎鸡蛋而闻名);nocona则是最新的带有EMT64(64位)的P4(同样可以煎鸡蛋)
说明:pentium3m/pentium4m是笔记本用的移动P3/P4;pentium-m是迅驰I/II代笔记本的cpu;prescott是带SSE3的P4(以滚烫到可以煎鸡蛋而闻名);nocona则是最新的带有EMT64(64位)的P4(同样可以煎鸡蛋)