博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何编写Makefile?
阅读量:6268 次
发布时间:2019-06-22

本文共 2247 字,大约阅读时间需要 7 分钟。

//swap.c#include
int swap(int *x,int *y){printf("a=%d b=%d\n",*x,*y); int z; z=*x; *x=*y; *y=z; printf("a=%d b=%d\n",*x,*y);}//max.cint max(int a,int b){ return a>b?a:b;}//test.cint main(){ int x=3,y=4; printf("max=%d\n",max(x,y)); swap(&x,&y); } 下来我们来编写Makefile文件 vi Makefile //文件名一定要为Makefile,不能是其他任何名字,标准为Makefile,书上写的是makefile
all:test//all也可以改为其他任何名字max.o:max.c    gcc -o max.o -c max.c//最前面是个TAB键,固定格式不能修改的!!!swap.o:swap.c    gcc -o swap.o -c swap.ctest.o:test.c    gcc -o test.o -c test.ctest:max.o swap.o test.o    gcc -o test swap.o max.o test.o
编写Makefile时,最好用vi编辑器,不可用记事本gedit,否则会出现如下错误的!!!!
接着昨天的写
touch可以修改文件的时间!可以看出现在swap.c的时间大于swap.o的时间!
make的原理 1:makefile怎么知道了哪个文件被修改了 根据时间判断哪个文件被修改了 make如何知道那个.c文件被修改了,然后只重新单独编译此文件,其他没有修改的文件不会被再次编译, 如果只修改了某个.o文件,只做链接,这节省了好多时间的啊!!一句话只要做了修改,最后的的链接是必不可少的!!! 2:makefile文件是如何执行的呢?
exe:testmax.o:max.c    gcc -o max.o -c max.cswap.o:swap.c    gcc -o swap.o -c swap.ctest.o:test.c    gcc -o test.o -c test.ctest:max.o swap.o test.o    gcc -o test swap.o max.o test.o[root@linux Makefile_example]# 如果没有.o文件的话,那么就全部执行上面的所有操作! 如果已经make后,再次修改某个.o或者.c文件然后用他们的时间进行比较,如果.o文件的时间小于.c文件的时间,说明.c文件被修改过,那么就执行gcc -o xxx.o -c xxx.c这句 接着执行gcc -o test swap.o max.o test.o这句! 还有一个问题那就是为神魔要开头的这一句呢!exe:test 因为如图: test相当于main函数max.o swap.o test.o相当于调用函数!函数调用完毕后返回调用函数处,接着调用下一个函数;好像也可以不用最上面的exe:test,但是要把下面的语句放在最上面才可以!!! test:max.o swap.o test.o       gcc -o test swap.o max.o test.o

 今天老师又讲了另一种方法来编写Makefiel

我们来看下

//文件名为Makefile

EXEC=test

OBJS=test.o swap.o max.o
CC=gcc
$(EXEC):$(OBJS)//这句两句一定要放在这儿,不能放在后面那三
$(CC) -o $(EXEC) $(OBJS)
max.o:max.c
$(CC) -o max.o -c max.c
swap.o:swap.c
$(CC) -o swap.o -c swap.c
test.o:test.c
$(CC) -o test.o -c test.c

 

 

重新写Makefile文件

EXEC=test

OBJS=test.o swap.o max.o
CC=gcc
$(EXEC):$(OBJS)
$(CC) -o $@ $^
max.o:max.c
$(CC) -o $@ -c $<
swap.o:swap.c
$(CC) -o $@ -c $^
test.o:test.c
$(CC) -o $@ -c $^

执行情况同上,就不截图了啊!!!

 重新写Makefile

EXEC=test

OBJS=test.o swap.o max.o
CC=gcc
$(EXEC):$(OBJS)
$(CC) -o $@ $^
%.o:%.c
$(CC) -o $@ -c $<
cleal:
rm *.o $(EXEC)

执行情况如下:

重新写Makefile

 

EXEC=/usr/bin/www  把可执行文件放在

任意一个系统默认的路径里,就可以只用文件名来执行,而不用像以前那样输入./test;

为什么我这儿要将EXEC=/usr/bin/test换为www因为如果不换不能在任意目录通过文件名来执行,但是可以通过绝对路径来执行(/usr/bin/test),我估计以前我创建

了test在上述路径的目录里,所以可能执行了以前的,没有执行这次的二进制文件!!!

 

转载地址:http://kappa.baihongyu.com/

你可能感兴趣的文章
测试java的父子类化
查看>>
HDOJ 1008
查看>>
安装thrift出现的一些问题
查看>>
makefile编写---单个子目录编译模板
查看>>
Oracle DB_LINK如何使用
查看>>
cv resource
查看>>
关于加快INSERT语句执行速度和HINT /*+ append */及/*+ append nologging */的使用
查看>>
JDK源代码学习系列07----Stack
查看>>
firefox
查看>>
PS批处理的使用
查看>>
七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 【转】
查看>>
Quartz作业调度框架
查看>>
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
js-权威指南学习笔记13
查看>>
《超级时间整理术》晨读笔记
查看>>
Spring Boot 2.0(二):Spring Boot 2.0尝鲜-动态 Banner
查看>>
Delphi IdTCPClient IdTCPServer 点对点传送文件
查看>>
Delphi中使用ActiveX的一些心得
查看>>
QT5.8.0+MSVC2015安装以及环境配置(不需要安装VS2015)
查看>>
(原創) C/C++的function prototype和header file (C/C++) (C)
查看>>