本文共 3473 字,大约阅读时间需要 11 分钟。
C
语言和Linux
操作系统之间的关系非常密切。早在1977
年,贝尔实验室的Dennis Ritchie
就为了辅助开发UNIX
而发表了不依赖与具体机器系统的C
语言编译文本,即著名的ANSI C
从那时候起,C
就成为世界上使用最广泛计算机语言。 在LINUX
下,一般使用GNU C
编译器(GCC
)进行应用程序的编译。该编译器建立在自由软件基金会编译许可证的基础上,可以自由发布。GNU C
编译器(GCC
)是一款功能强大的ANSI C
兼容编译器,一般存放在/usr/bin
目录下;其头文件一般存放在/usr/include
及其下级子目录里;而标准的库文件则存在/lib
或/usr/lib
目录下里。Gcc
命令的基本用法如下所示: Make
是一个命令工具,它读入Makefile
的指令并按照其制定的规则执行。Makefile
文件中描述整个工程所有文件的编译顺序、编译规则,并且拥有自己的书写格式、关键字和函数;而且在Makefile
中可以使用系统shell
所提供的任何命令来完成想要的工作,因此能够大大提高编译程序的效率。通过其自动化编译的规则,只需要一个make
命令,整个工程就可以自动完成全部编译工作,因此在IDE
开发环境中得到广泛应用,已经成为一种工程方面的编译方法。 默认情况下,GNU make
工具在当前工作目录中按如下顺序搜索makefile:
GNUmakefile
àmakefile
àMakefile
虽然Makefile
作为规则的优先等级较低,不过由于Makefile
的首字母大写,因此在当前目录下会优先显示,所以程序员往往会采用Makefile
作为makefile
文件。如果要使用其他文件作为makefile
,则可采用以下方式: Target:dependency dependency
它包含target
、dependency
和command
三个部分。具体如下所示: 一个目标(target
):
最终需要创建的文件,包括可执行文件或者目标驱动文件等。当然目标也可以是需要执行的动作,如:“clean
”等。 一个或多个依赖文件(dependency
):
在创建target
是需要用到的文件列表。 一系列命令(command
):make
执行的动作,即创建target
时需要执行的步骤。通常是把制定文件编译成目标文件的编译命令,每个命令占一行,且每个命令的起始字符必须为TAB
字符。 编译的具体过程是:make
工具首先读取makefile
中的规则,然后检查该规则中的依赖文件与目标文件的时间截哪个更新一些,并根据规则链由下至上依次编译过程,直到最终的可执行文件被重新连接完成为止。 Makefile
里的变量类似一个环境变量。这些变量对大小写敏感,一般使用大写字母。 OBJS=prog.o code.o #
定义变量OBJS
$(CC) –O test $(OBJS) #gcc –o test prog.o code.o
Prog.o:prog.c prog.h prog.o
(3
)了解makefile
下的程序编译与交叉编译过程 (2
)掌握Linux
环境下vi
编译器的使用方法 (3
)掌握Linux
下的程序编译与交叉编译过程。 (1)
UP-NETARM2410-S
嵌入式实验平台 (2)
PC
机Pentium500
以上,硬盘40GB
以上,内存128MB
以上 (3)
PC
机操作系统RedHat Linux 9.0
创建一个新目录,并在其中编写hello.c
和Makefile
文件。之后将已经编译好的文件下载到目标开发板上运行。 #include <stdio.h> /*
定义头文件*/
Printf(“hello world.!\n”); /*
输出hello world! .
换行*/
(3)
完成代码的编写之后,按住ESC
键之后,输入:wq
保存退出。 (2)
输入Makefile
文件代码,其中几个变量的说明如下: CC=armv4l-unknown-linux-gcc /*
定义armv4l-unkown-linux-gcc
交叉编译器,这个armv4l-unknown-linux-gcc也可以用gcc代替,编译后在linux中运行hello执行程序,也可以输出hello world!*/
EXEC=hello /*
执行文件名为hello*/
OBJS=hello.o /*
目标文件为hello.o*/
LDFLAGS+=-static /*
连接参数*/
all:$(EXEC) /*
编译主入口,表示编译所以的内容,是执行make
默认的目标*/
$(EXEC):$(OBJS) /*
执行文件,到目标文件*/
$(CC) $(LDFLAGS) -o $@ $(OBJS) /*armv4l-unknown-linux-gcc-static –o hello hello.o */
clean: /*
清除所有的生成的执行文件,*.elf *.o *.gdb*/
-rm -f $(EXEC) *.elf *.o *.gdb
注意:“ $(CC) $(LDFLAGS) –o $@ $(OBJS)
”和“-rm –f $(EXEC) *.elf *.o *.gdb
”前前的空白由一个Tab
制表符生成。 [root@localhost arm2410s]#make clean
rm –f hello *.elf *.o *.gdb
[root@localhost arm2410s]#make
armv4l-unknown-linux-gcc -c -o hello.o hello.c
armv4l-unknow-linux-gcc-static –o hello hello.o
[root@localhost arm2410s]#ls
Hello hello.c hello.o Makefile
(1)
在宿主机上启动NFS
服务,并设置好共享的目录。之后进入minicom
中建立开发板与宿主机之间 的通信 [root@EmbedSky /]# mount -t nfs -o nolock 192.168.1.10:/arm2410s /host
呵呵,如果看到在超级终端输出hello world! 。恭喜你!你已经成功了。
本文转自 chen138 51CTO博客,原文链接:http://blog.51cto.com/chenboqiang/287194,如需转载请自行联系原作者