设为首页 加入收藏

TOP

Ubuntu 编译运行C笔记
2014-11-24 12:09:27 来源: 作者: 【 】 浏览:0
Tags:Ubuntu 编译 运行 笔记

作为初学者,我很享受和在意学到的每一点知识,写下这入门级的文章,主要是记载自己的点点滴滴,为10年后的自己寻找回忆的时候留下一条线索,如果能够帮助到一些新学习Linux的同学,那是最好不过的了!


GNU是GUN‘s not unix的递归所写,呵呵,感觉这个很有意思。GNU本来是一个大牛发起的一项发展自由操作系统,自由软件的运动。gcc是GNU C语言编译器,后来发展可以进行C++的编译了,成为GNU compiler collection的缩写。这是简单的历史和背景,因为我们要用gcc去编译我们的c程序


编译的时候首先要进入到你的c文件所在的那个目录,不然找不到原文件,通过ls命令可以察看当前目录下的文件


一:编译单C文件


gcc text.c 会默认产生a.out文件,即默认的目标代码文件


gcc -c text.c 会产生和源文件同名的目标文件即:text.o


gcc text.c -o liu 产生名为liu的可执行文件 或者 gcc -o liu text.c ./liu就可以执行程序了



二:用到非系统默认类库


比如用到多线程类库pthread


gcc text.c -o liu -lpthread 或者gcc -o liu text.c -lpthread -lpthread一定放在最后面,即,在-l后面加上你要用到的类库


三:多个源文件进行编译,即 makefile 的编写或者Makefile



makefile的好处是防止源文件的重复编译


比如有好多个源文件,某天对其中一个源文件进行修改,如果不写makefile的话,需要将整个工程的所有文件重新编译一遍,非常麻烦,有了makefile,说明了每个源文件的依附关系,当某个源文件改变的时候只需重新编译一下关联的源文件就好。


例如:有以下文件


one.h


one.c


two.h


two.c


main.c


main.c 中引入one.h 和two.h两个头文件,one.c two.c 分别实现两个头文件中定义的函数


有两种方式编译运行该程序,


一:手动单独编译


gcc -c one.c


gcc -c two.c


gcc -c main.c


gcc -o main main.o one.o two.o


./main


二:makefile



那么只需在任何一个文本编辑器里面写下如下命令,并保存为makefile


main:main.o one.o two.o


tab键gcc(或者cc)-o main main.o one.o two.o


main.o:main.c one.h two.h


tab键gcc(或者cc)-c main.c



one.o:one.c one.h


tab键gcc(或者cc)-c one.c


two.o:two.c two.h


tab键gcc(或者cc)-c two.c


这些源文件都需要在同一个目录下,并且在main.c中引入one.h 和two.h的时候要用"one.h" "two.h"不要用<>否则编译器会到系统类库文件中去找,是找不到的。


然后在同一目录的终端下,输入make命令,那么编译就开始了,没有什么错误的话,执行./main就可以让你的程序跑起来了。


还可以对makefile进行精简:


首先有三个符号:


1 $@ 代表目标文件


2 $< 代表第一个文件


3$^ 代表所有依赖文件


所以上面命令可以精简为:


main:main.o one.o two.o


tab键gcc(或者cc)-o $@ $^



main.o:main.c one.h two.h


tab键gcc(或者cc)-c $<



one.o:one.c one.h


tab键gcc(或者cc)-c $<



two.o:two.c two.h


tab键gcc(或者cc)-c $<


以上makefile还可以精简:


一个新的符号:.c.o


该符号自动搜索相关联的源文件和头文件


于是makefile还可以写为:



main:main.o one.o two.o


tab键gcc(或者cc)-o $@ $^


.c.o:
tab键gcc(或者cc) $<


最好在加上clean命令,将生成的目标文件和执行文件删除,遵守优雅简洁原则,呵呵,方便再次编译


clean:


ab键gcc(或者cc)rm main main.o one.o two.o



makefile的格式大家要记住了,至于问什么这样写,只能说这是标准,makefile还有很多高深的用法,以后在逐渐去学习。


Ok,不对的地方大家请指正,有疑问的地方请留言。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android中人脸识别技术 下一篇C语言冒泡排序

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)