Linux 自己写的几个比较简单的makefile

什么是makefile

       一个文本形式的文件,其中包含一些规则告诉make编译哪些文件以及怎样编译这些文件。通过make命令来逐步执行Makefile定义好的编译规则。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

几个简单的makefile

Ⅰ)编译可执行程序的makefile

  1 SRC=$(wildcard ./*.c)  #取出所有的。c文件   
  2 OBJ=$(patsubst %.c, %.o, $(SRC))   #把.c结尾的替换成.o文件
  3 BIN=./main
  4 #BIN要生成的对象依赖所有.o文件
  5 all:$(BIN)
  6 $(BIN):$(OBJ)
  7     gcc -o $@ $^ 
  8 
  9 %.o: %.c
 10     gcc -c $< -o $@  #-c 只编译不链接 -o 指定生成的对像名
 11 #声明一个对象为伪对象,不需要生成的对象
 12 .PHONY:clean
 13 clean:
 14     rm -r $(BIN) $(OBJ)

Ⅱ)编译动态链接库

  1 SRC=$(wildcard ./*.c)
  2 OBJ=$(patsubst %.c, %.o, $(SRC))
  3 BIN=./libdynamic_test.so   #lib 静态库名称 .so
  4 
  5 $(BIN):$(OBJ)
  6     gcc --share -o $@ $^   #编译或者链接动态库
  7 %.o:%.c
  8     gcc -c $< -o $@ -fPIC
  9 clean:
 10     rm -rf $(OBJ) $(BIN)

Ⅲ)编译静态链接库

  1 SRC=$(wildcard ./*.c) ##取出所有的.c文件   
  2 OBJ=$(patsubst %.c, %.o, $(SRC))   ##把.c结尾的替换成.o文件
  3 LIB=./libstatic_test.a    ##lib 静态库名称 .a
  4 #LIB要生成的对象依赖所有.o文件
  5 all:$(LIB)
  6 $(LIB):$(OBJ)
  7     ar cr $@ $^       #专门用来链接生成静态库
  8 %.o: %.c
  9     gcc -o $@ -c $<  #-c 只编译不链接 -o 指定生成的对像名
 10 #声明一个对象为伪对象,不需要生成的对象
 11 .PHONY:clean
 12 clean:
 13     rm -r $(LIB) $(OBJ)

       我们可以看到上边的3个makefile都比较相似,所以可以在充分理解的前提下,把其做为一种通用的makefile合理的的使用。在上面的3个makefile中都声明了伪对象,所谓伪对象,并不是一个文件,只是一个标签,由于伪对象不是文件,所以make无法生成它的依赖关系和决定它是否要执行。我们只有通过显示地指明这个目标才能让其生效。当然,伪目标的取名不能和文件名重名,不然其就失去了伪目标的意义了。为了避免和文件重名的这种情况,我们可以使用一个特殊的标记.PHONY来显示地指明一个目标是伪目标,向make说明,不管是否有这个文件,这个对象就是伪对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值