g++ 重要编译参数

一. -g 产生带调试信息的可执行文件test

产生带调试信息的可执行文件test,如果不加-g,输出的test是不包含调试信息的。加了-g 才可以被GDB所调试。

g++ -g test.cpp -o test

二. -o 优化源代码

优化指省略掉代码中从未使用过的变量,直接将常量表达式用结果值代替等。
这些操作会缩减目标文件的所包含的代码量,提高最终生成的可执行文件的运行效率。

一般使用 -o2 ,表示g++产生尽可能小和尽可能快的代码

g++ -o2 test.cpp 

g++ 重要编译参数_第1张图片

-o 参数实例

vim inefficiency.cpp
#include 
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

g++ 重要编译参数_第2张图片

执行没有优化的可执行文件,并显示执行时间:

time ./a_without_0

执行优化后的可执行文件,并显示执行时间:

time ./a_with_o2

看第一个时间即可。优化后的代码时间减少。
g++ 重要编译参数_第3张图片

三. -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 
int main()
{
	#ifdef DEBUG
		printf("DEBUG LOG\n");
	#endif
		printf("in\n");
}

十. 查看GCC命令使用手册

man gcc

g++ 重要编译参数_第4张图片

你可能感兴趣的:(C++笔记,C/C++,g++,linux,C++)