|
make 程序接受了 -C选项面在参数它自己先跳到 -C后面选项的目录中在解析Makefile执行Makefile的命令
make -C bsp/uboot -f $(UBOOT_MAK) clean -k:发现错误继续编译 -n:输出要执行的步骤但不执行,如($ make -n -f Makefile hello)
-f:指定makefile的名字
export 会让所有子makefile 享用变量 export BUILD_TOP_DIR :=$(shell pwd)
变量赋值的时候,有冒号的当时就解析,没有冒号的会在用的地方解析, 效果是=号取最后的值,而冒号则是按当前顺序当前的值
OUT_DIR :=$(subst \,/,$(OUT_DIR))
OUT_DIR =$(subst \,/,$(OUT_DIR))
foreach 基本用法
sublibs := $(foreach n,$(SUBCOMPONENTS),$(OUT_DIR)/$(n)/$(n).a)
替换换展名
COBJS = $(SRCC:.c=.o)
COBJS := $(COBJS:.C=.o)
增加前缀 addprefix
COBJS := $(addprefix $(O_DIR)/,$(COBJS))
WIN32 操作系统中要把路径中的 '\' 变成 '/' , 要不问题无穷 (msys 会不认,但又得用win32 路径找文件)
DEP_INC := $(subst \,/,$(DEP_INC))
msys 的路径格式为
/c/work/OK2440/build
gcc 参数中只认msys格式路径
DEP_INC := $(subst C:,/c,$(DEP_INC))
ifneq ($(DEP_INC),)
DEP_INC := -I$(DEP_INC)
endif
多级文件夹调用
SUBCOMPONENTS += $(blabla)
Make_Sub:
@for subdir in $(SUBCOMPONENTS); do \
mkdir -p $(OUT_DIR)/$$subdir;\
(cd $$subdir && make -f $(MAKEFILE) sub_all O_DIR=$(OUT_DIR)/$$subdir); \
done;
自动推导
$(O_DIR)/%.o: ./%.c
@echo compile $< to $@
$(CC) -c -o $@ $(CFLAG) -I $(INCLUDES) $<
生成depend, $< 输入的依赖文件 ,$@为目标文件
gcc 生成depend 格式为 filename.o filename.c includes. 注意不同情况下要对生成结果进行转换,下面是在o前加上$(O_DIR),
echo的 -n 参数会不在行尾生成回车符
$(DEP_DIR)/%.d: %.c
@echo Depend: $< to $@
@echo -n $(O_DIR)/ > $@
@$(GCC) $(DEP_OPT) -I$(DEP_INC) $< >> $@
clean 和其它操作不要depend , 传入参数 NODEP=yes
(cd $$subdir && make -f $(MAKEFILE) sub_clean O_DIR=$(OUT_DIR)/$$subdir NODEP=yes) ; \
包含方式sinclude是兼容unix的-include, 没有文件时不报错, include 会报错停止
ifndef NODEP
ifneq ($(DEPS),)
sinclude $(DEPS)
endif
endif
还是msys 的格式,不认'('和')', 得加转义符
LINKFLAG=-armlib -map -entry __ENTRY -first 2440init.o(Init) -ro-base 0x30010000 -->
LINKFLAG=-armlib -map -entry __ENTRY -first 2440init.o\(Init\) -ro-base 0x30010000
2.1预处理gcc -E test.c -o test.i 或 gcc -E test.c可以输出test.i文件中存放着test.c经预处理之后的代码。打开test.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到test.c中了。
2.2编译为汇编代码(Compilation)预处理之后,可直接对生成的test.i文件编译,生成汇编代码:
gcc -S test.i -o test.s
gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。
|
|