Linux下C语言编程求教!
刚刚接触Linux下面的C语言编程,离开了熟悉的Windows IDE环境,很多地方都不熟悉、不了解,特此向各位大侠求教。
1、在Linux下,对于一个工程项目,包含多个源程序(.c程序),gcc是如何组织并编译它们的?举例而言,一个项目包含main.c root.c exce.c三个源文件,include了main.h sten.h 两个头文件,Gcc如何编译链接?是不是简单的用gcc -o a.out main.c root.c exec.c命令就可以了?不需要向windows IDE下面那样,用一个project文件来描述各个源程序之间的关系吗?gcc如何确定哪个源文件是主文件,是不是通过寻找哪个文件中包含main()来实现的?
2、在linux下,用gcc编译程序时,如何进行断点跟踪?是用gcc本身,还是使用其他工具更为方便直观?另外在编写程序时,我感觉使用vi由于没有语法高亮,很不适应,大家有没有好的编辑器推荐?(console下)
问题点数:20、回复次数:10Top
1 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2004-07-04 11:00:29 得分 5
1.在Unix/Linux,是通过make来对项目的组织的。make文件中包含了文件之间的依赖关系。运行make命令后会产生一个makefile文件,再运行make install命令安装程序。要了解更多关于make的信息,可以到www.gnu.org下载make命令的manual.
2.一个Unix/Linux下的程序的运行入口点就是main()函数,相当于Windows下了winmain()函数。
3.GDB是一个很好的Unix/Linux环境下的调试工具。
4.我装的Redhat Linux 9.0下的vi可以高亮显示呀,如果不可以的话,你可以试试vim,是vi的增强版。
PS:学习Unix/Linux下的编程,www.gnu.org是很好的去处,很多的说明都可以再这里获得。Top
2 楼nokuta(新手上路)回复于 2004-07-04 11:27:18 得分 0
我知道Makefile,它主要指定源程序文件的依赖关系。但是我对依赖关系的意思没有怎么理解透彻。
例如,root.c源程序里面定义了一个函数a(),然后main.c源程序中调用了这个函数a(),那么是不是我们就可以说,main.c依赖于root.c?在makefile中我们就应该写为:main.o:main.c root.c?
那么如果是互相调用呢?比如root.c定义a(),main.c定义b(),然后root.c中调用b(),main.c中调用a(),那他们之间的依赖关系应该怎么算?
可能我的概念是模糊和错误的,请各位大侠指点一下,谢谢!Top
3 楼tukey(反美反霸权!)回复于 2004-07-04 14:34:32 得分 0
upTop
4 楼blankman(菜鸟)回复于 2004-07-05 00:28:21 得分 5
To:houdy(苦练内功中) ( )
老大,负责一点嘛,不要给人家乱回答啊,误导啊!!!
第一条有问题
makefile文件不是运行make生成的!!!
./configure倒是可以生成makefile文件,但是configure是一个可执行文件
根据系统的配置自动生成相应的makefile文件
make 默认找当前目录下的 makefile 文件,也可以 make -f filename 来指定
install 是makefile里的一个类似于 Label 的东东,意思是从哪里执行,
不是所有makefile文件里面都有的,换句话说那个不是必需的
有的还有clean等Top
5 楼blankman(菜鸟)回复于 2004-07-05 00:31:06 得分 5
依赖关系是指谁 include 谁,不是谁调用谁,应该是这样理解的
还有用 gdb 调试需要在编译的时候加上参数,好像是 gcc -g .....
记不清楚了,你查一下帮助吧
再补充一点,configure文件相当于打包生成的,不是系统的命令Top
6 楼ImHow(Think in Linux)回复于 2004-07-05 06:31:02 得分 0
楼上,是gcc -g
configure命令是软件目录下的,所以一般都是用./configure来使用Top
7 楼tengulre(debian core developer)回复于 2004-07-05 09:12:21 得分 0
gcc -g
Top
8 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-07-05 13:10:29 得分 5
呵呵,我来系统的回答一下吧。
gcc -g -o tgt a.c b.c c.c
生成tgt目标文件,是以main为入口。.h文件只是声明文件,并不参与编译过程。
至于所谓的./configure 都是以标准的GNU风格的编译前配置命令脚本。一般可以使用automake生成,当然也可以直接就写makefile。但是以automake生成的是GNU风格的makefile。
make是执行makefile的命令不是文件。
要在编程环境下高亮显示可以在进入vi以后执行:syntax on 命令
带了-g 选项生成的tgt文件可以使用gdb来调试 下面是基本用法
gdb tgt
break 3 // set breakpoint
run // running
display // display variable
kill // stop debug
quit // quit
more you can man gdb
good luck for uTop
9 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2004-07-06 08:10:27 得分 0
to blankman(菜鸟):谢谢你的提醒,我一时弄错了:(Top
10 楼therabbit00()回复于 2004-07-06 10:55:59 得分 0
学会写makefile;
emacs或者vs都可以啊;
自己看看g**怎么用把。Top




