-C / -f / 相关命令:
-C:
Makefile中-C是递归调用子目录中的Makefile,-C选项后跟目录,表示到子目录下执行子目录的Makefile,顶层Makefile中的export的变量还有make默认的变量是可以传递给子目录中的Makefile的
–f :
-f file
指定file文件为描述文件,如果file参数为"-“符,那么描述文件指向标准输入。如果没有”-f"参数,则系统将默认当前目录下名为makefile或者名为Makefile的文件为描述文件。在Linux中, GNU make 工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索 makefile文件。
指定作为makefile的文件的名称。 如果不用该选项,那么make程序首先在当前目录查找名为makefile的文件,如果没有找到,它就会转而查找名为Makefile的文件。
顶层Makefile使用make -f调用子目录中的文件(文件名可以随意,不一定用Makefile作为文件名)作为Makefile,顶层Makefile中的export的变量也可以传递变量到底层目录,另外在命令行中加入变量赋值选项,将覆盖顶层Makefile中export的变量;
但是,经测试,在顶层Makefile中使用-f选项,例如make -f ./xxx/xx/build.mk 此时make命令的工作目录仍然是顶层目录,即CUDIR变量依然是./目录而不是./xxx/xx/目录。
- -g、-o、-c、-C、-f 、-D、-Wall、-L、-nostdlib 含义:
例如:a.o b.o x.o: a.c b.c x.c
cc -c $< -o $@
其中: $< 表示 a.c (即所有依赖的合集的第一个文件)
$@ 表示 a.o b.o x.o (即所用目标的合集)
补充1:四个$ 代表随机编号
如 echo “rocme” > file.四个$ 的意思就是将“rocme”这个字符串写入file.1234 这个文件,其中1234这个数字是随机生成的。
补充2:$$ 表示真实的 $ 字符
因为$字符已经被makefile用来做变量引用,如$(MAKE),所用如果需要用$$ 表示真实的 $。这个有啥用呢?Makefile引用变量只需要一个$符号就够了,为什么这里要两个呢?因为如果变量i是在shell的for循环中定义的,是属于shell中的变量。make在读到的时候会把它扩展成$i
(有点转义字符的意味),也就是说,make在第一遍解析的时候,会将 $$i 变成 $i,交将shell,shell再从$i中取出来i真正对应的值处理。也就是说$$的用处,一般在shell 的命令中,取出来真正的值的时候会用到
__build_one_by_one:
$(Q)set -e; \
for i in $(MAKECMDGOALS); do \
$(MAKE) -f $(srctree)/Makefile $$i; \
done
补充3:$?代表依赖文件列表中被改变过的所有文件
$^代表a.c b.c x.c
原文链接:https://blog.csdn.net/plc_jianghao/article/details/22577895
原文链接:https://blog.csdn.net/xiaoyink/article/details/108465261