linux系统编程——cmake,make,gcc,gdb等工具的使用
对于很小的工程,我们可以对于一个个文件手动完成编译和链接工作,比如像这篇文章说的这样,一个个的进行编译和链接。
但是工程大了之后自然就不能这么使用了,因此我们需要makefile来指明编译的顺序和编译之后的各个文件之间的依赖关系,但是对于一个较大的工程而言,写makefile也是一件让人头疼的事情。
除此之外,不同平台的构建文件规范是不一样的,如果有一种工具可以自动生成不同平台的构建文件就好了。
这个时候,就有了cmake,具体cmake的使用是参照这篇文章,写的非常的详细。
另外,上面这边文章讲了如何生成静态库,关于动态库的生成可以参考这篇文章。
cmake做了以下事情:
- 通过CMakeList.txt文件来控制整个编译流程,自动生成makefile文件,实现了“Write once, run everywhere”的目标,可以支持win和*nix,通过在平台环境上进行搜索用于build的文件,windows+VS环境下,可以帮你生成.sln,vcxproj文件,而在*nix则是makefile,同理MAC OS则是xcode的项目文件。
GCC的相关命令:
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
作用:将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,级别越大优化效果越好,但编译时间越长。
GCC多文件编译
1.多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2.分别编译各个源文件,之后对编译后输出的文件进行链接
用法:#gcc -c testfun.c
#gcc -c test.c
#gcc testfun.o test.o -o test
作用:好处是只修改了某个文件的时候,不用对整个工程都进行一次编译
GDB的调试方式
GDB调试的方式有三种:
- gdb <program>
program也就是你的执行文件,一般在当前目录下。
- gdb <program> core
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
- gdb <program> <PID>
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
更加具体的gdb使用细则可以看:这里,不过注意一点,要使用gdb,必须在编译阶段加入-g选项。