gcc⽤法(编译多个源⽂件)
⼀. 常⽤编译命令选项
假设源程序⽂件名为test.c。
1. ⽆选项编译链接
⽤法:#gcc test.c
作⽤:将test.c预处理、汇编、编译并链接形成可执⾏⽂件。这⾥未指定输出⽂件,默认输出为a.out。
2. 选项 -o
⽤法:#gcc test.c -o test
作⽤:将test.c预处理、汇编、编译并链接形成可执⾏⽂件test。-o选项⽤来指定输出⽂件的⽂件名。
3. 选项 -E
⽤法:#gcc -E test.c -o test.i
linux下gcc编译的四个步骤
作⽤:将test.c预处理输出test.i⽂件。
4. 选项 -S
⽤法:#gcc -S test.i
作⽤:将预处理输出⽂件test.i汇编成test.s⽂件。
5. 选项 -c
⽤法:#gcc -c test.s
作⽤:将汇编输出⽂件test.s编译输出test.o⽂件。
6. ⽆选项链接
⽤法:#gcc test.o -o test
作⽤:将编译输出⽂件test.o链接成最终可执⾏⽂件test。
7. 选项-O
⽤法:#gcc -O1 test.c -o test
作⽤:使⽤编译优化级别1编译程序。级别为1~3,级别越⼤优化效果越好,但编译时间越长。
⼆. 多源⽂件的编译⽅法
如果有多个源⽂件,基本上有两种编译⽅法:
[假设有两个源⽂件为test.c和testfun.c]
1. 多个⽂件⼀起编译
⽤法:#gcc testfun.c test.c -o test
作⽤:将testfun.c和test.c分别编译后链接成test可执⾏⽂件。
2. 分别编译各个源⽂件,之后对编译后输出的⽬标⽂件链接。
⽤法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test
以上两种⽅法相⽐较,第⼀中⽅法编译时需要所有⽂件重新编译,⽽第⼆种⽅法可以只重新编译修改的⽂件,未修改的⽂件不⽤重新编译。
3. 如果要编译的⽂件都在同⼀个⽬录下,可以⽤通配符gcc *.c -o 来进⾏编译。
你是否会问,如果是⼀个项⽬的话,可能会有上百个⽂件,这样的编译法,⼈不是要累死在电脑前吗,或者等到你编译成功了,岂不是头发
都⽩了,呵呵,所以我们要把上述的编译过程写进以下⼀个⽂本⽂件中:
Linux下称之为makefile
#这⾥可以写⼀些⽂件的说明
MyFirst: MyFirst.o hello.o
g++ MyFirst.o hello.o -o MyFirst
Hello.o:Hello.cpp
g++ -c Hello.cpp -o Hello.o
MyFirst.o:MyFirst.cpp
g++ -c MyFirst.cpp -o MyFirst.o
makefile 编写规则:
(1)以“#”开始的⾏为注释
(2)⽂件依赖关系为:
target:components
rule
存盘为MyFirst,在终端输⼊:make MyFist ,程序出现了错误可是所有程序员共同的敌⼈,在编写程序时我们应该尽量的去避免错误的出现,不过编写的时候再怎么都不可避免的出现这样那样的错误,对程序 进⾏必要的调试是⼀个好主意,那我们怎么来调试程序呢,看下⾯:
gdb ./⽂件名 在这⾥我修改下要想下⾯可以调试,在上⾯编译的 时候必须加上参数g,g++ -g hello.cpp -o hello
以下为调试状态下的可以⽤到的命令(可以仅输⼊单词的输⼊,如break可简为b),尖括号中为说明
list <;显⽰源代码>
break ⾏号 <;设置断点>
run <;运⾏程序>
continue <;继续从断点处执⾏>
print 变量 <;调试时查看变量的值>
del ⾏号 <;删除断点>
step <;单步执⾏,可跟踪到函数内部>
next <;单步执⾏,不可跟踪到函数内部>
quit <;退出>
makefile 的编写不是件容易的事情,因为⾃⼰写的makefile可能不能在所有的unix/linux类操作系统下通⽤。因此在很多项⽬中都⽤automake.autoconf或者是Cmake等⼯具。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论