gcc和g++是一款编译语言的编译器,可以在linux上编译c语言文件和c++文件。
格式:
gcc/g++ 目标文件
在不加任何选项的时候,编译出来的可执行文件名默认是 a.out。
gcc编译
gcc在将文件编译形成可执行代码,其实中间还分为好几步,可以通过选项来一步一步编译。
1.预处理:预处理就是将编写好的代码里的宏替换掉,去掉注释,展开头文件,条件编译
gcc -E 目标文件 -o 目标文件.i
2.编译:汇编会将写好的代码转成汇编语言
gcc -S 目标文件
gcc -S 目标文件 -o 编译后文件名.s
3.汇编:将汇编语言转化成计算机可以看得懂的二进制代码
gcc -c 目标文件
gcc -c 目标文件 -o 汇编后文件名.o
每一个步骤的文件后缀可以都填.c,但这里建议填对应的后缀,可以看出这个文件到了哪一步, -o后面是一定执行后的文件名
4.链接:与包含的库文件进行链接形成可执行文件
gcc 目标文件 -o 链接后文件名
链接的方式分为两种,一种是静态链接,一种是动态链接,默认是动态链接(如果动态库找不到,才回去找静态库),如果想要静态链接,需要再加一个选项
gcc 目标文件 -o 链接后文件名 -static
静态库默认是不安装的,想要安装需要使用yum安装。
yum install glibc-static c语言静态库
yum install -y libstdc++-static c++静态库
头文件路径:
/usr/include
库文件路径:
/usr/lib64/libbc
gcc和g++:
gcc只可以编译c语言而g++既可以编译c++又可以编译C语言,是因为c语言和c++的库文件路径是不一样的,在编译的时候需要去找库文件的路径,gcc只会寻找c语言的库文件,没法寻找c++的库文件,而c++两个库文件都可以找。
debug和release
默认的编译方式是release,如果想要以debug方式编译,需要加上一个选项
gcc 目标文件 -o 链接后文件名 -g
debug模式可以进行调试
makefile
makefile是一个可以快捷使用自己设置的指令的自动化方法。
格式:可以形成的可执行文件:可执行文件所依赖的源文件 这一行是可执行文件和源文件的依赖关系将源文件给编译成可执行文件的方式 这一行是用gcc这样的编译器编译源文件
例:
在makefile里,可以用 $@ 来表示依赖关系当中的执行后文件,$^来表示依赖关系中的依赖文件,如果有多个依赖文件,这样用比较方便。
这里将gcc编译分成了好几步,
1.test依赖于test.o文件,但是test.o文件不存在,那就需要先形成test.o
2.test.o依赖于test.s文件,但是test.s文件不存在,那就需要先形成test.s
3.test.s依赖于test.i文件,但是test.i文件不存在,那就需要先形成test.i
4.test.i依赖于test.c文件,test.c文件存在,用依赖方法形成test.i文件,一步一步返回知道形成test可执行文件。
在makefile里面,可以用 .PHONY:来修饰 $@文件,让该文件的依赖方法总是能够执行。
例:
不能执行的情况:
make后,如果依赖文件没有变动,就不会重新编译,用.PHONY修饰后就可以编译。
make
在mkafile里面编译好之后,直接在命令行输入make,就会执行第一行的依赖关系对应的依赖方法 ,除了第一行以外需要在make后面加上字符串,这个字符串是依赖关系中左边的部分
例:
make clean
如果想要make就可以直接执行make clean的依赖方法,需要将clean放到第一行。
make后,如果依赖文件没有变动,就不会重新编译
每次make之后,对应的依赖方法都会显示到屏幕上,如果想不显示出来,可以在依赖方法前面+@。