小试牛刀之makefile常见错误及其解决
Makefile在大型的基于GNU工具链的软件开发中随处可见,它GNU make工具调用,在软件工程的整个编译过程中发挥着重要的作用,其具体功能包括编译,汇编和链接工具的调用,预编译过程中所用动态编译量的定义,工程文件路径的控制等。可以这样说,懂得makefile的编写和工作原理,能够读懂一个软件工程的全部makefile文件是整体把握此软件工程(project)的关键所在。
关于makefile的详细功能和原理介绍以及编写规则可以参见我之前在EEPW上的一篇博文——《神秘的Makefile(原创)》网络连接为:http://huxiongwei.spaces.eepw.com.cn/articles/article/item/77313
这里我就最近在搞基于DE2开发板的NIOS 2 uClinux2.6-19的移植及S3C2440 wince5.0 BSP移植及开发工作中所遇到的一些makefile相关的问题及其相应的解决总结一下,其目的同样是希望与大家共同分享.
1. makefile error:56 :***遗漏分隔符,停止.
提示:在makefile文件中某一行(这里为56行),少了一个分隔符,故编译停止。
解决:在编写makefile文件时,编写规则规定所有的命令(包括自定义工具名打头的命令),如gcc,clean,all等,之前必须是tab作为分隔符,不能用空格代之。因为tab通常为4个空格的长度。所以将错误行Backspace到最左边,再加一tab键开始即可了。
这一问题常常发生在修改利用别人已有makefile的时候。
2. makefile error:***/arch:是一个目录,停止。
提示:makefile文件中某一参数或者路径为一个目录,故make工具不能识别该参数,继而停止工作。
解决:这一问题在makefile的所有错误中最为隐蔽,不易检查,却十分容易犯。在makefile中所有路径的引用或定义行末都不能有空格,应直接以回车符结束。
例如:ROOTDIR = /home/my_nios2/uClinux-dist<space>
这样的一个路径定义在make过程中就会报上面的错误,去掉行末的空格键(<sapce>)改为如下即可。
ROOTDIR = /home/my_nios2/uClinux-dist
关于makefile的问题很多,对于我们搞嵌入式的人来说,做嵌入式软件,只要牵涉到操作系统就少不了要和makefile打交道,所有的这些问题在实践工作中都会不期而至,我们要做的不仅是要解决之,更重要的是要多总结它们,积累的多了,问题也就自然少了。呵呵,以上是鄙人拙见,不当之处还望大牛赐教。
胡恩伟·重庆
重大A区一舍426
2010年9月11日星期六
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。