makefile编写粗略(部分)解读

               Make工程管理器

定义:“自动编译管理器”,这里的’自动’是值它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。

编写makefile时创建和使用变量,其定义变量的两种方式

递归展开方式VAR=VM

简单方式VAR:=VM

递归方式可以有下面的用法:

OBJ=VAR

VAR=VM

VM=main.c

这里还有一些创建和使用变量的方式,有兴趣可以到网上查下。

除此之外还有一些,系统预定义的变量:

CC-------------------表示gccc编译器的名称

CPP----------------------c预编译器的名称

CXX----------------------C++编译器的名称,默认为g++

等等还有一些....

一般是用简单方式来创建和使用变量。

简单的编写makefile(几种makefile的编写)

若当前有三个文件,分别为main.c increment.c negate.c

Mian中会用到后面两个文件

法一:

目标体:依赖体

执行体

  1 main:main.o increment.o negate.o

  2         gcc -Wall -g main.o increment.o negate.o -o main

  3 main.o:main.c

  4         gcc -Wall -g -c main.c -o main.o

  5 increment.o:increment.c

  6         gcc -Wall -g -c increment.c -o increment.o

  7 negate.o:negate.c

  8         gcc -Wall -g -c negate.c -o negate.o

  9 clean:

 10         rm  -rf negate.o  increment.o main.o main

~                                                     

法二:

技巧一:给在执行体中会常常用到的多个参数,用一个伪目标来代替该多个参数

技巧二:$@:表示目标体

$^:表示当前的所有依赖体成员

$<:表示当前依赖成员的第一个成员

  1 #.PHONY:clean

  2 CC := gcc

  3 BY := -c

  4 OBJECT := main.o increment.o negate.o

  5 

  6 main:$(OBJECT)

  7         $(CC) -Wall -g $(OBJECT) -o $@

  8 main.o:main.c

  9         $(CC) $(BY) $< -o $@

 10 increment.o:increment.c

 11         $(CC) $(BY) $< -o $@

 12 negate.o:negate.c

 13         $(CC) $(BY) $< -o $@

 14 

 15 clean:

 16         rm  -rf main $(OBJECT)                           

                                                                               

                      

法三:

技巧一:给在执行体中会常常用到的多个参数,用一个伪目标来代替该多个参数

技巧二:$@:表示目标体

$^:表示当前的所有依赖体成员

$<:表示当前依赖成员的第一个成员

技巧三:用%.o:%.c将当前文件夹中的所有.c文件转换为.o文件,很节约代码行,推介用

  1 CC      :=gcc

  2 BY      :=-Wall -g  -c

  3 OBJECT  :=main.o increment.o negate.o

  4 

  5 main:$(OBJECT)

  6         $(CC) -Wall -g  $^ -o $@

  7 %.o:%.c

  8         $(CC) $(BY) $< -o $@

  9 clean:

 10         echo "to makefile.3....."

 11         rm -rf main $(OBJECT)

 12 

法四:                  

二、直接用才gcc来编译生成可执行文件

Gcc main.c increment.c negate.c -o main

条件:

在主函数只中需要用声明要用到的外部函数原型,本工程在主函数中需要声明的为:

extern int increment(int );

extern int negate(int);

三、通过生成库文件来管理工程

静态库:

首先:要将在主函数中用到的函数编译生成二进制文件

gcc -Wall -c increment.c  -o increment.o

gcc -Wall -c negate.c  -o negate.o

然后:将其生成静态库*.a文件,如下:

ar rcs libfunction.a  increment.o negate.o

然后通过通过该库和主函数链接,然后编译生成可执行文件。

条件:需要在主函数中添加需要用到的函数的额文件用:

#incldueincrement.c

#inclduenegate.c

gcc -Wall libfunction.a  main.c  -o main

动态库:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值