一、gcc/g++的编译参数
1、-g 编译带有调试信息的可执行文件,
调试信息是调试器gdb使用的调试信息,用来调试程序,
调试信息和可执行文件在统一输出文件中,带有调试信息的可执行文件大小会大很多。
g++ -g test.cpp
2、-O[num] 优化源代码
优化:
编译器通过一切程序员不知道的方法,比如:省略掉未使用的变量,使用结果代替常量表达式等操作,改变代码,提高可执行文件的执行效率。
-O 告诉g++对源代码进行优化,一般优化会让程序运行的更快,num范围常在0-3之间
-O0表示不做优化
-O1为默认优化
-O2除了10的优化以外,还做一些额外调整工作,例如指令调整等
-O3包括循环展开和其他一些处理特性相关的优化工作
选项会使编译的速度变慢,好处是编译的可执行文件运行会更快。
g++ -O2 test.cpp -o test
这里的test.cpp的内容过于简单了,不演示三种优化命令的效果了。
3、-l指定库文件,-L指定库文件路径
-l小写l用来指定程序要链接的库,后面要紧跟库名,g++默认的三个路径为/lib,/usr/lib,/usr/local/lib可以直接使用-l链接到,例如:
g++ -lglog test.cpp
编译test.cpp时链接glog库
如果库文件没有放在上面的三个目录里,需要使用-L参数指定库文件所在目录,-L参数跟着的时库文件所在的目录名,例如:
g++ -L/home/dzl/folder -lmytest test.cpp
链接mytest库,这个库存放在/home/dzl/folder目录下
注意在编译时要编译的文件放在g++的后面,头文件和库文件放在编译文件的后面,否则会编译报错。
4、-I指定头文件搜索目录
头文件在/usr/include目录中时一般不需要指定,不在时需要使用-I/dir,如果不加会报错,内容是“no such file or directory”,-I可以使用相对路径,例如:
g++ -I/myinclude test.cpp
5、-Wall打印警告信息
可以打印出gcc提供的警告信息
g++ -Wall test.cpp
可惜没啥警告信息
6、-w关闭警告信息
g++ -w test.cpp
7、std=c++11设置编译标准
使用c++11编译test.cpp
g++ -std=c++11 test.cpp
8、-o指定输出文件名
g++ test.cpp -o test
如果没有-o就会默认输出a.out
前面有很多。
9、-D定义宏
在使用gcc/g++编译的时候定义宏,例如-DDEBUG定义DEBUG宏,当文件中有DEBUG宏定义相关部分的信息时,可使用-DDEBUG来选择开启或关闭DEBUG
三、文件很多的时候的编译
1、最简单的就是直接编译
g++ main.cpp src/swap.cpp -Iinclde
编译./main.cpp和./src目录下的swap.cpp,引用的头文件在./include路径下
因为没有指定-o,所以编译出来的可执行程序是a.out,运行的时候输入./a.out回车就可以。
2、添加参数编译
g++ main.cpp src/swap.cpp -Iinclude -std=c++11 -O2 -Wall -o test
编译./main.cpp和./src/swap.cpp,引用的头文件在./include路径中,使用c++11作为编译标准,O2级优化,打印出编译时gcc提供的警告信息,输出可执行程序名为为test
加了一堆参数,要注意的其实是语法别犯错就行。