欢迎来到天天文库
浏览记录
ID:39577023
大小:39.50 KB
页数:5页
时间:2019-07-06
《手动建立makefile简单实例解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、手动建立makefile简单实例解析 假设我们有一个程序由5个文件组成,源代码如下: /*main.c*/ #include"mytool1.h" #include"mytool2.h" intmain() { mytool1_print("hellomytool1!"); mytool2_print("hellomytool2!"); return0; } /*mytool1.c*/ #include"mytool1.h" #include voidmytool
2、1_print(char*print_str) { printf("Thisismytool1print:%s",print_str); } /*mytool1.h*/ #ifndef_MYTOOL_1_H #define_MYTOOL_1_H voidmytool1_print(char*print_str); #endif /*mytool2.c*/ #include"mytool2.h" #include voidmytool2_print(char*print
3、_str) { printf("Thisismytool2print:%s",print_str); } /*mytool2.h*/ #ifndef_MYTOOL_2_H #define_MYTOOL_2_H voidmytool2_print(char*print_str); #endif 首先了解一下make和Makefile。GNUmake是一个工程管理器,它可以管理较多的文件。我所使用的RedHat9.0的make版本为GNUMakeversion3.79.1。使用make的最
4、大好处就是实现了“自动化编译”。如果有一个上百个文件的代码构成的项目,其中一个或者几个文件进行了修改,make就能够自动识别更新了的文件代码,不需要输入冗长的命令行就可以完成最后的编译工作。make执行时,自动寻找Makefile(makefile)文件,然后执行编译工作。所以我们需要编写Makefile文件,这样可以提高实际项目的工作效率。 在一个Makefile中通常包含下面内容: 1、需要由make工具创建的目标体(target),通常是目标文件或可执行文件。 2、要创建的目标体所依赖的文件(dep
5、endency_file)。 3、创建每个目标体时需要运行的命令(command)。 格式如下: target:dependency_files command target:规则的目标。通常是程序中间或者最后需要生成的文件名,可以是.o文件、也可以是最后的可执行程序的文件名。另外,目标也可以是一个make执行的动作的名称,如目标“clean”,这样的目标称为“伪目标”。 dependency_files:规则的依赖。生成规则目标所需要的文件名列表。通常一个目标依赖于一个或者多个文件。
6、 command:规则的命令行。是make程序所有执行的动作(任意的shell命令或者可在shell下执行的程序)。一个规则可以有多个命令行,每一条命令占一行。注意:每一个命令行必须以[Tab]字符开始,[Tab]字符告诉make此行是一个命令行。make按照命令完成相应的动作。这也是书写Makefile中容易产生,而且比较隐蔽的错误。命令就是在任何一个目标的依赖文件发生变化后重建目标的动作描述。一个目标可以没有依赖而只有动作(指定的命令)。比如Makefile中的目标“clean”,此目标没有依赖,只有命令。它所指定
7、的命令用来删除make过程产生的中间文件(清理工作)。 在Makefile中“规则”就是描述在什么情况下、如何重建规则的目标文件,通常规则中包括了目标的依赖关系(目标的依赖文件)和重建目标的命令。make执行重建目标的命令,来创建或者重建规则的目标(此目标文件也可以是触发这个规则的上一个规则中的依赖文件)。规则包含了目标和依赖的关系以及更新目标所要求的命令。 Makefile中可以包含除规则以外的部分。一个最简单的Makefile可能只包含规则描述。规则在有些Makefile中可能看起来非常复杂,但是无论规
8、则的书写是多么的复杂,它都符合规则的基本格式。 下面就可以写出第一个Makefile了。 main:main.omytool1.omytool2.o gcc-omainmain.omytool1.omytool2.o main.o:main.cmytool1.hmytool2.h gcc-cmain.c mytoo
此文档下载收益归作者所有