Makefile中export分析

在分析内核启动过程的./arch/arm/Makefile文件里碰到了这样字段

162  export TEXT_OFFSET GZFLAGS MMUEXT  

然后在子目录arch/arm/kernel/vmlinux.lds文件中又用到了TEXT_OFFSET

24    . = PAGE_OFFSET + TEXT_OFFSET;                 

上网一查export才知道:

这个是用来提供该子目录makefile(sub make)中访问的,同一级的另外一个makefile中,是无法访问/得到的。

(可以通过makefile中内置变量MAKELEVEL查看得知当前makefile的levlel)

常规用法如下:



carifan_TopMake=E516537_in_top_make
export carifan_TopMake                                                         //在目标外部export                 
focus_bfin:
echo current make MAKELEVEL=$(MAKELEVEL)
echo *****************test Value in Top Makefile=$(carifan_TopMake)         
make -f main.mak PLATFORM=Bfin PRODUCT=Focus MAKE_TARGET=focus_bfin



若export在目标内部使用,这样通过echo将会打出空符号"test Value in Top Makefile=  "

(详细链接:http://blog.csdn.net/a1232345/article/details/42112881)

时间: 2024-08-26 23:20:13

Makefile中export分析的相关文章

u-boot的Makefile语法教程分析

U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*. U-BOOT的下载地址: http://sourceforge.net/projects/u-boot我下载的是1.1.6版本,一开始在FTP上下载了一个次新版,结果编译失败.1.1.6是没问题的. u-boot源码结构    解压就可以得到全部u-boot源程序.在顶层目录下有18个子目录,分别存放和管理不同的源程序.这些目录中所要存放的文件有其规

makefile中的all和.PHONY的作用

请编写一个makefile同时编译.链接下面两个程序: 1 main1.c: 2 #include<stdio.h> 3 int main(void) 4 { 5 printf("main1\n"); 6 } 7 main2.c: 8 #include<stdio.h> 9 int main(void) 10 { 11 printf("main2\n"); 12 } [分析]:这里需要生成两个可执行文件main1和main2(两个目标).由于

Makefile中wildcard的介绍

在Makefile规则中,通配符会被自动展开.但在变量的定义和函数引用时,通配符将失效.这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN...) .在Makefile中,它被展开为已经存在的.使用空格分开的.匹配此模式的所有文件列表.如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空.需要注意的是:这种情况下规则中通配符的展开和上一小节匹配通配符的区别. 一般我们可以使用“$(wildcard *.c)”来获取工作目录下的

Makefile 中向下传参问题讨论

发现一个规律,凡是在上一级Makefile中这样执行:make -C xxx CFLAGS="$(CFLAGS)",那么在 xxx/Makefile 中对 CFLAGS 的设置就会不生效. 做个实验 建一个这样的目录: Makefile 的内容: CFLAGS=-I../xxx all:     @echo ---top:CFLAGS=$(CFLAGS)---     make -C sub CFLAGS="$(CFLAGS)" sub/Makefile 的内容:

Linux 内核 Makefile 体系简单分析 (转)

转载自mz_linux的ChinaUnix博客 :http://blog.chinaunix.net/uid-26806098-id-3141136.html 众所周知,Linux内核是使用make命令来配置并编译的,那必然少不了Makefile.在内核目录树中我们可以看到内核编译系统的顶层Makefile文件.但是如此复杂.庞大的内核源码绝不可能使用一个或几个Makefile文件来完成配置编译,而是需要一套同样复杂.庞大,且为Linux内核定制的Makefile系统.她可以说是内核的一个子系统

Makefile中的$(MAKE)

今天看uboot2018顶层的Makefile中发现文件中export一个MAKE变量,export是为了向底层的Makefile传递这些变量参数,但是找了半天没有找到这个MAKE变量在哪定义的. 决定写一个Makefile测试一下 make输出结果: 难道MAKE是makfile中默认的变量?而且默认就是make?暂时这样理解吧.希望有大神指点一下. 原文地址:https://www.cnblogs.com/huhui/p/9208201.html

makefile中一些编译器选项

makefile中一些编译器选项 CFLAGS CXXFLAGS CFLAGS 表示用于 C 编译器的选项 CXXFLAGS 表示用于 C++ 编译器的选项 这两个变量实际上涵盖了__编译__和__汇编__两个步骤 指定头文件(.h文件)的路径 CFLAGS=-I/usr/include -I/path/include (安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来) LDFLAGS gcc等编译器会用到的一

关于makefile中变量的多次赋值以及override指令

1 基本原则如下 1.1 原则1 变量的普通赋值是有先后顺序的,后面的赋值会覆盖掉前面的赋值. 1.2 原则2 使用的时候,用的是其前面最后的赋值,就算其后面有使用了override指令的赋值也不会影响这条原则. 1.3 原则3 当使用了override指令定义赋值了变量后,其后对该变量的所有的赋值都是无效的.但是override之前的所有的赋值都是有效的.使用的时候是往前最近原则. 2 override变量.命令行参数和普通变量之间的屏蔽关系 override变量会屏蔽命令行参数,除非用+=:

(转)makefile中的自动依赖规则

Makefile生成自动依赖的方法有两种: 1.  将所有.o文件的依赖关系写入单独文件,然后在Makefile中调用该文件 2.  每个.c文件对应一个.d文件,将依赖关系写入.d文件中 一.对于第一种方法,Makefile的写法如下: #file start CC = gcc SRCS := $(wildcard *.c) OBJS := $(patsubst %.c,%.o, $(SRCS)) all: main main: $(OBJS) $(CC) -o main $(OBJS) .d