- 论坛徽章:
- 20
|
本帖最后由 nswcfd 于 2016-04-18 13:13 编辑
1. Makefile @curdir
1) 解释make变量定义
a. a = curdir
b. b = curdir
c. include curdir/test.make
2)扫描规则&依赖
all: (默认)
3)build目标
a. 子make(make -C ksrc M=`pwd` modules) #注意-C的影响
b. echo curdir
2. Makefile @ksrc
1)解释变量
a. 几个关键的变量是M,KBUILD_EXTMOD, modules-dirs
b. 扫描规则&依赖
modules: modules-dirs
make -f scripts/Mafile.modpost
modules-dirs:
make -f scripts/Makefile.build obj=curdir
2)build依赖modules-dirs
a. 执行子make -f scripts/Makefile.build obj=curdir
3)build目标modules
a. 执行子make -f scripts/Mafile.modpost
3. Makefile.build @ksrc/scripts
1)解释变量
a. kbuild-file = curdir/Makfile
b. include $kbuild-file,即curdir/Makefile
b.1 a = $(PWD) = curdir #-C不影响这个值
b.2 b = $(shell pwd) = ksrc #注意不是ksrc/scripts
b.3 obj-m被定义
b.4 include $ksrc/test.make #这个受到了-C的影响。
c. 根据obj-m的定义决定下一步行为
11楼的例子说明了-C对$(PWD)和$(shell pwd)的影响
PWD是shell的环境变量,make初始化的时候从环境变量里继承了这个值(外部变量,并向子make传递)。
make -C dir相当于在make内部调用chdir(dir),【不影响】继承自shell的make变量。
相反,所有在make内部发起的shell命令,由于shell会初始化自己的PWD,所以会受到chdir的影响。- #include <stdlib.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <string.h>
- void show()
- {
- char buf[128];
- strcpy(buf, "XXXX");
- getcwd(buf, 128);
- printf("getcwd=%s\n", buf);
- printf("env[PWD]=%s\n", getenv("PWD"));
- system("echo shell-pwd=`pwd`");
- }
- #define SUBDIR "sub"
- int main()
- {
- show();
- printf("\nchdir to %s...\n\n", SUBDIR);
- chdir(SUBDIR);
- show();
- }
复制代码 |
|