make makefile

makefile
Make file
GNUmakefile  三种默认方法

make  gmake编译 都可以编译上面

make 默认是找第一个目标
make clean 找clean这个目标

make -f mymk.mk
make -f mymk.mk clean


目标与依赖
目标: 依赖
    编译指令
其中目标的名字是可以随便改的,下面的clean也是可以随便命名的,只是约定俗称这样写的
一般来说他可以产生目标,也可以不产生目标,
my.log: a.txt
    cat a.txt > my.log

clean:
      rm my.log   

上面第一个target不产生文件,你多次执行是有一点问题的,主要文件是最新的(就是依赖文件是最新的的话,他就不会再执行这个命令)
下面
clean 是不产生target的,他可以多次执行这个命令,因为他不产生文件, 不用考虑
依赖文件更新文件
产生一系列指令

最终看的是,cpp文件的时间戳是否是最新的
一是没mubiao
二是 时间戳 依赖文件必目标更新

目标不存在,就一直可以执行



:w

一次性全部做完,不产生.o文件,就是上面不产生.o文件
 g++ -o bin/make_test src/main.cpp src/sub1/dummy*.cpp src/sub2/dummy*.cpp -g -Wall -I inc  , 这种就是不产生中间文件

-o是指定要产生的文件名  你不指定,他也会产生目标文件,但是他是在当前目录下产生的, -o是可以指定你在那个目录下产生目标文件

先看文件,在看文件产生的以来文件,下面

all: bin/make_test  这个文件

OBJS+= + 是防止覆盖
一般要加上小过好

在一个规则当中
../bin/make_test : $(OBJS)
        g++ ­o $(@) $(^)
 $@是指上面的目标文件make_test,^是指上面的$(OBJS)

./sub2/dummy4.o : ../src/sub2/dummy4.cpp
        g++ ­g ­Wall ­o $(@) ­c $(<) ­I$(INC)

$@ 是上面的./sub2/dummy4.o,$(<)是上面的第一个依赖文件

用变量是精简代码
:0

递归查开一个目录下的所有文件是ls -R

ctrl+v ctrl+i

%无论什么时候,都会执行目标,

./PHONY: clean 是产生一个伪目标

@是销回符号,屏蔽符号
-是不中断程序的执行,

模块化编程,
就是同时有

include build/sub.mk
include build /sub/mke



make的6个版本
第一种是一般的完全展开写,

第二种是:替换个变量,将原来重复的东西给添加到一个变量中,然后让这个变量去表示
RM := rm ­rf
第三种是: $@ 和^ $<的 自动变量的使用,$@是目标文件,$^是所有的依赖文件,<是第一个依赖文件
g++ ­g ­Wall ­o $(@) ­c $(<) ­I$(INC)
第四种是:加为 Makefile 添加 .PHONY 标签  可以讲某目标当成伪目标
第五种是:Makefile 模块化,


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值