Linux下C编程里的makefile
来源:互联网 发布:英国大学排名知乎 编辑:程序博客网 时间:2024/05/21 10:43
/*main.c*/#include "mytool1.h"#include "mytool2.h"#include <stdio.h>int main(int argc,char *argv[]){ mytool1_print("hello"); mytool2_print("hello");}/*mytoo1.h*/#ifndef _MYTOOL1_H#define _MYTOOL1_Hvoid mytool1_print(char *print_str);#endif/*mytool1.c*/#include "mytool1.h"void mytool1_print(char *print_str){ printf("This is mytool1 print %s\n",print_str);}/*mytool2.h*/#ifndef _MYTOOL2_H#define _MYTOOL2_Hvoid mytool2_print(char *print_str);#endif/*mytool2.c*/#include "mytool2.h"void mytool2_print(char *print_str){ printf("This is mytool2 print %s\n",print_str);}
我们可以这么编译链接这个程序:
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o myprint main.o mytool1.o mytool2.o
这样之后只需执行命令"./myprint",便可以简单的运行这个程序。
但是当我们修改了其中的一个文件之后是不是还要不厌其烦的输入上面的编译命令?
为了解决这一问题,我们有个好方法去解决,那就是编写一个makefile文件,用make命令去编译上面的程序。
执行命令"vim Makefile”
编写如下代码:
main: main.o mytool1.o mytool2.o[Tab]gcc -o myprint main.o mytool1.o mytool2.omain.o: main.c mytool1.h mytool2.h[Tab]gcc -c main.cmytool1.o: mytool1.c mytool1.h[Tab]gcc -c mytool1.cmytool2.o: mytool2.c mytool2.h[Tab]gcc -c mytool2.c
保存后执行命令“make -f Makefile”
这样也可以生成一个可执行程序。
有了这个Makefile文件之后,无论我们修改什么地方,只要make一些这个文件,就可以轻松的生成可执行文件。
在Makefile中#开始的行为注释行,此文件的一般格式为:
(target目标):(components依赖对象)
【Tab制表符按键】(rule规则)
第一行为依赖关系,比如上面那个Makefile文件的第一行,我们的目标main的依赖对象为main.o、mytool1.o和mytool2.o
第二行为执行规则,当依赖的对象在目标修改后修改的话,就要执行规则这一行所指定的命令,注意,这一行开头必须是Tab键。
上面的make里的-f参数表示寻找到名为Makefile的文件进行make,因为make只能自动识别名为makefile或者Makefiile两个文件,如果你编译的
makefile文件名为my_makefile的话,就需要加上-f参数,否则make无法找到你指定的my_makefile文件。
此外,makefile里面还有三个非常有用的变量:$@(目标文件)、$^(所有的依赖文件)和$<(第一个依赖文件)
如果使用这三个变量,我们的Makefile文件可以简化为:
main: main.o mytool1.o mytool2.o[Tab]gcc -o $@ $^main.o: main.c mytool1.h mytool2.h[Tab]gcc -c $<mytool1.o: mytool1.c mytool1.h[Tab]gcc -c $<mytool2.o: mytool2.c mytool2.h[Tab]gcc -c $<
最后,相信大家都已经看出来了吧,其实makefile的文件就是一个递归的过程。
- Linux下C编程里的makefile
- linux下的C编程和makefile的使用
- [编程代码]一个linux下的gcc/c语言makefile
- linux下的makefile编程
- Linux下C语言编程基础(Makefile)
- Linux下C语言编程基础(Makefile)
- Linux下C语言编程基础(Makefile)
- Linux下C语言编程基础(Makefile)
- Linux下C编程之makefile
- Linux下C语言编程基础(Makefile)
- 【linux下编程】MakeFile
- linux C编程 Makefile的使用
- Linux下Makefile文件的编程基础
- Linux下C语言编程基础知识--gcc编译器的使用、MakeFile文件的编写
- Linux下C语言编程基础 —— Makefile
- linux下c/c++编程中的makefile文件编写
- Linux下C编程:gcc和Makefile体验
- Linux下的第一次编程,小小进度条(C 语言 加Makefile)
- Spring如何实现自动依赖注入-------autowire
- 使jsp支持EL表达式
- hdu 1540 Tunnel Warfare(线段树 连续区间)
- 算法导论11.1-4
- AJAX与spring mvc交互
- Linux下C编程里的makefile
- ExtJS 2.2中,从FormPanel中获取指定field控件
- tarjan算法
- 在linux上编译tolua++-1.0.93
- SQL数据库设计规范参考之数据库对象命名详细文档
- 杭电1012结题报告
- (转载)Linux管道命令
- IOS学习五:UITabBarController初步
- 8.5字段操作