makefile的一点小细节记录

文章目的

    写makefile时,指定输出目录后,结果导致了,不管依赖文件是否改变,只要执行make命令就会执行编译的过程,有点疑
 惑,所以就做个小实验,看下什么问题导致的,具体原因已经在makefile文件中解释。顺便也做了一下伪目标的实验,问题
 的描述和解决在makefile注释中已经描述。这篇博客的目的就是记录一下这2个实验的测试结果,方便以后查阅。

测试目录

	|---Makefile
	|---mian.c

测试的Makefile

OUT_DIR=out
TARGET = test
#.PHONY:$(OUT_DIR)
#.PHONY:FORCE
all: $(OUT_DIR) check_dir $(TARGET)
	@echo "...all..."

#如果没有添加".PHONY:$(OUT_DIR)",创建一次之后就不会再执行,原因,第一次创建了out目录,每次执行前都会检测一次,out是是否存在,如果存在就不会执行
$(OUT_DIR):
	@echo "....create $@...."
	@mkdir -p $@

#check_dir这个没有同名的文件或目录就会认为是伪目标,每次都会执行
#也就是说伪目标有2种方式创建,一种是显示申明:"PHONY: target_name"
#还有一种是隐士的,make如果检测到目标没有文件或目录与之对应就认为这个是伪目标
#第2种是我自己的理解
check_dir:
	@echo "create $(OUT_DIR)/out1"
	@mkdir -p $(OUT_DIR)/out1

#这样写的问题,不管main.c是否跟新,都会被执行。原因:目标是test ,没有带路径,所以每次找到都是在当前目录下查找,而每次查找test,都没有查找到,所以每次都会执行
#为了验证这个说法,加一句cp -rf $(OUT_DIR)/$@ ./ ,即复制目标到当前的目录下,然后就不会每次都执行了,只用mian.c改动 才会执行,验证了上面说法是正确的
$(TARGET):main.c
	@echo "...$@.." 
	gcc $^ -o $(OUT_DIR)/$@
	cp -rf $(OUT_DIR)/$@ ./

.PHONY:clean
clean:
	rm -rf $(OUT_DIR)   $(TARGET)
	



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值