makefile 知识点 :
1、$@、$^、lt;/”
这三个分别表示:
$@ --代表目标文件(target)
$^ --代表所有的依赖文件(components)
lt; --代表第一个依赖文件(components中最左边的那个)。
@ 命令前面添加,左右是关闭回显
-c和-o都是gcc编译器的可选参数
-c表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件,一般是.o文件。
-o用于指定输出(out)文件名。不用-o的话,一般会在当前文件夹下生成默认的a.out文件作为可执行程序。
2、gcc 语法
方法1
//编译 (-c 只编译不链接)
gcc -c project.c -o project.o
//链接
gcc -o project.exe project.o
方法2
//编译并链接
gcc -o project.exe project.c
https://www.cnblogs.com/davygeek/p/5670212.html
// 执行,要添加 动态库路径
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
gcc -ltest (link 动态库libtest.so) -L (location 在目录里查找)
在Makefile中:
O2表示优化选项,2表示最优优化,即编译器会优化你的程序;-o表示后边接的是文件名称;$@是Makefile的通配符,代指你前面指定的文件名,例如有规则%.o:%.c,那么$@表示xxx.o文件(xxx是你的源代码文件的名称前缀);lt;表示搜索到的第一个匹配的文件,对于规则%.o:%.c,lt;表示第一个找到的.c文件。简而言之,假设在一个文件夹下有若干.c文件,那么下面的规则:
%.o:%.c
表示把所有的.c文件编译成中间.o文件。
Makefile 中:= ?= += =的区别:
https://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html
set -e的作用是,当后面的命令的返回值非0时,立即退出
当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD)
3、makefile之call函数
//定义
# $(1): output file
define build-systemimage-target
@echo "Target system fs image: $(1)"
$(call create-system-vendor-symlink)
@mkdir -p $(dir $(1)) $(systemimage_intermediates) && rm -rf $(systemimage_intermediates)/system_image_info.txt
//调用
$(BUILT_SYSTEMIMAGE): $(FULL_SYSTEMIMAGE_DEPS) $(INSTALLED_FILES_FILE)
$(call build-systemimage-target,$@)
4、$(error TEXT…)
函数功能: 产生致命错误,并提示“ TEXT…”信息给用户,并退出 make 的执行。
$(warning TEXT…)
函数功能: 函数“ warning”类似于函数“ error”,区别在于它不会导致致命错误( make 不退出),而只是提示“ TEXT…”, make 的执行过程继续
大家学会吗?如有疑问多交流,共同学习。