我是靠谱客的博主 羞涩星星,最近开发中收集的这篇文章主要介绍Makefile常见符号意思,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    Makefile里有许许多多的符号,对于新手而言如果没有经常使用,就很容易忘记,所以我把常见符号的意义写下,方便日后忘记查询。本文章会持续更新...

 

1.$@:代表目标;$^代表所有依赖,$^代表第一个依赖。

         eg:下图的$@代表目标名test,$^代表所有依赖,即test.c和seqlist.c,所以相当于gcc -O0 -g -Wall -o test test.c seqlist.c。

CC = gcc                            #使用gcc编译器
CFLAGS =-O0 -g -Wall                #-O0代表编译的时候不进行相应的优化;
                                  #-g代表可以使用gdb进行相应的调试,编译的时候会添加一些调试信息
                                     #-Wall把警告信息全都打印出来
test:test.c seqlist.c

    $(CC) $(CFLAGS) -o $@ $^

2..PHONY:假设我们的makefile所在目录下,刚好有名为clean的文件,那么我们执行make clean这条规则时并不能执行rm *.o test,如果加上.PHONY:,则可以成功执行rm *.o test.(因为每条规则下的命令被执行必需满足以下情况之一:1.目标在当前路径不存在;2.某个依赖比目标“新”,假如我们当前路径有clean文件,而Makefile里面的clean又没有依赖文件,所以就会发生错误啦!)

test: a.o b.o c.o
	gcc -o test $^
	
%.o : %.c
	gcc -c -o $@ $<

clean:
	rm *.o test

.PHONY: clean	

3.

:=   # 即时变量,A := xxx   # A的值即刻确定,在定义时即确定
=    # 延时变量,B = xxx    # B的值使用到时才确定
?=   # 延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
+=   # 附加, 它是即时变量还是延时变量取决于前面的定义

A := $(C)    #即时变量,定义时即确定,因为变量C还未赋值,所以A为空
B = $(C)    #延时变量,用到时才确定,所以打印B为abc 123
C = abc

D = AABBCC
D ?= 123456    #在上一行已经定义了变量的,所以根据?=的特性,D打印出来是AABBCC

all:
	@echo A = $(A)
	@echo B = $(B)
	@echo D = $(D)

C += 123

 

最后

以上就是羞涩星星为你收集整理的Makefile常见符号意思的全部内容,希望文章能够帮你解决Makefile常见符号意思所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部