首页
Web开发
Android
J2EE
PHP
Linux/Unix
MySql
C#
更多...
当前位置:
我的异常网
»
编程
» 用gcc往编译c程序
用gcc往编译c程序
www.myexceptions.net 网友分享于:2013-04-10 浏览:1次
用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,不对的地方大家请指正,有疑问的地方请留言
为什么程序员都是夜猫子
老美怎么看待阿里赴美上市
十大编程算法助程序员走上高手之路
编程语言是女人
我跳槽是因为他们的显示器更大
5款最佳正则表达式编辑调试器
如何区分一个程序员是“老手“还是“新手“?
“懒”出效率是程序员的美德
编程-热门
编程-最新
编程-其它
1
Java札记二十.深入解析I/O编程之文件访问类
2
一路编程题实在是不知道哪个地方错了
3
opencv入门札记之四 读写视频 捕捉移动点
4
Java札记二十二.深入解析I/O编程之包装类
5
poj_3669_Meteor Shower(BFS+预加工)
6
【Coder Force】#360B - Levko and Array(DP 2分枚举)
7
Java札记十九.深入解析I/O编程之流的层次结构
8
莫队算法总结(Markdown版)
9
内核编译之ACPI异常,ACPI: [Package] has zero elements
10
【编程直播】回约吗
1
好记忆力不如烂笔头18-java对Oracle的CLOB字段的操作
2
hdu 4341 分组双肩包
3
java8 函数引述 -> 一种利用现有函数简单推理为函数表达式即简化的函数表达式
4
NYOJ笨货的难题(一)
5
Java 线程起步(实现Runnable接口)
6
好记忆力不如烂笔头26-JAVA处理文件事务(4)
7
hdu 2438 Turn the corner(3分)
8
数组瓜分——解题笔记
9
【BZOJ3680】吊打XXX 狭义费马点 模拟退火
10
命令行编译跟运行带backage和带jar的包
1
【Coder Force】#360B - Levko and Array(DP 2分枚举)
2
Java札记二十.深入解析I/O编程之文件访问类
3
【编程直播】回约吗
4
opencv入门札记之四 读写视频 捕捉移动点
5
Java札记二十二.深入解析I/O编程之包装类
6
poj_3669_Meteor Shower(BFS+预加工)
7
内核编译之ACPI异常,ACPI: [Package] has zero elements
8
一路编程题实在是不知道哪个地方错了
9
莫队算法总结(Markdown版)
10
Java札记十九.深入解析I/O编程之流的层次结构
上一篇:
OpenSessionInViewFilter 的配备及作用
下一篇:
深入研究java.lang.Runtime种
文章评论
相关解决方案
1
gcc
学习笔记(1) -
编译C程序
及
编译
过程
2
Android上透过
gcc编译
普通的
C程序
3
Linux学习札记五:
gcc程序
编译
4
Linux上的
GCC程序
编译
(IMUDGES)
5
c程序
编译
的方法
6
关于ubuntu中用
gcc编译C程序
的有关问题
7
C程序
8
Visual Studio 2010
编译C
及一个完整的
c程序
(可在windows与linux(用
gcc编译
)平台上使用)
9
C程序
编译
历程浅析,
c
开发
10
请教上ios只有
gcc编译
纯
C程序
吗,是否有g++
编译
器
代码女神横空出世
10个调试和排错的小建议
中美印日四国程序员比较
总结2014中国互联网十大段子
每天工作4小时的程序员
漫画:程序员的工作
我的丈夫是个程序员
老程序员的下场
什么才是优秀的用户界面设计
聊聊HTTPS和SSL/TLS协议
科技史上最臭名昭著的13大罪犯
如何成为一名黑客
程序员的鄙视链
程序员眼里IE浏览器是什么样的
做程序猿的老婆应该注意的一些事情
程序员都该阅读的书
旅行,写作,编程
团队中“技术大拿”并非越多越好
“肮脏的”IT工作排行榜
程序员周末都喜欢做什么?
程序员和编码员之间的区别
鲜为人知的编程真相
不懂技术不要对懂技术的人说这很容易实现
写给自己也写给你 自己到底该何去何从
程序员应该关注的一些事儿
程序员的样子
10个帮程序员减压放松的网站
为啥Android手机总会越用越慢?
要嫁就嫁程序猿—钱多话少死的早
软件开发
程序错误
异常
Exception
Copyright © 2009-2015
MyException
版权所有