一. -g 产生带调试信息的可执行文件test
产生带调试信息的可执行文件test,如果不加-g,输出的test是不包含调试信息的。加了-g 才可以被GDB所调试。
g++ -g test.cpp -o test
二. -o 优化源代码
优化指省略掉代码中从未使用过的变量,直接将常量表达式用结果值代替等。
这些操作会缩减目标文件的所包含的代码量,提高最终生成的可执行文件的运行效率。
一般使用 -o2 ,表示g++产生尽可能小和尽可能快的代码
g++ -o2 test.cpp
-o 参数实例
vim inefficiency.cpp
#include <iostream>
using namespace std;
int main(void)
{
unsigned long int counter;
unsigned long int result;
unsigned long int temp;
unsigned int five;
int i;
// 每个for训练,都计算counter的值
for (counter=0;counter<2009*2009*100/4 + 2010;counter+=(10-6)/4)
{
temp = counter/1979;
for (i=0;i<20;i++)
// 每一次for循环 都计算一个常量
five = 200 * 200 /8000;
result = counter;
}
cout <<"result="<<result<<endl;
return 0;
}
# 不使用优化参数生成一个可执行文件
g++ inefficiency.cpp -o a_without_0
# 使用-o2参数优化该冗余代码,生成一个更高效的可执行文件 a_with_02
g++ inefficiency.cpp -o2 -o a_with_o2
ls -lh
执行没有优化的可执行文件,并显示执行时间:
time ./a_without_0
执行优化后的可执行文件,并显示执行时间:
time ./a_with_o2
看第一个时间即可。优化后的代码时间减少。
三. -l 和 -L 指定要链接的库文件 | 指定要链接的库文件路径
# 链接glog库
# 在/lib和/usr/lib 和 /usr/local/lib 中的库,直接用-l参数就能链接
g++ -lglog test.cpp
# 如果库文件没放上面三个目录里,需要使用-L参数指定库文件所在目录
# 链接/home/bing/mytestlibfolder路径下的mytest库文件
g++ -L/home/bing/mytestlibfolder -lmytest test.cpp
四. -I (大写的i) 指定头文件搜索目录
i是include的缩写,/usr/include目录一般是不用指定的,gcc知道去哪里找,但是如果头文件不在/usr/include里,我们就要用-I来指定。比如头文件在/myinclude目录里,编译命令行要加上 -I/myinclude参数。如果不加会得到一个 xxxx.h:No such file or directory的错误。
-I 可以用相对路径,比如头文件在当前目录下。
g++ -I/myinclude test.cpp
五. -Wall 打印警告信息
g++ -Wall test.cpp
六. 关闭警告信息
g++ -w test.cpp
七. -std=c++11 设置编译标准
# 使用c++11标准编译test.cpp
g++ -std=c++11 test.cpp
如果不指定,那么会使用默认的,比如是c++98,那么它就不包含c++11的特性。
八. -o 指定输出文件名
g++ test.cpp -o test
九. -D 定义宏
# 定义 DEBUG宏
# 如果文件中有DEBUG宏部分的相关信息,用DDEBUG来选择开启或关闭DEBUG
g++ -DDEBUG main.cpp
对下面的main.cpp文件定义DEBUG之后,才会执行 #ifdef DEBUG后面的语句。
#include <stdio.h>
int main()
{
#ifdef DEBUG
printf("DEBUG LOG\n");
#endif
printf("in\n");
}
十. 查看GCC命令使用手册
man gcc