...
关于内嵌shell时分号的使用,比如if[]; then xxx; fi, 区分shell的分号在单行与多行中的作用;
Makefile内部执行make -f时,当前Makefile定义的变量不会传递到指定的make -f指定的文件中,如果需要传递,则要用export导出,如下:
代码块 |
---|
CC = gcc
CFLAGS = "-Iinclude -O2 -fomit-frame-pointer -fPIC -ffunction-sections -fdata-sections"
CXX = g++
CXXFLAGS = "-Iinclude -O2 -fomit-frame-pointer -fPIC -ffunction-sections -fdata-sections"
export CC CFLAGS CXX CXXFLAGS
all:
make -f linux.mk
clean:
make -f linux.mk clean |
关于VPATH与头文件自动生成:
代码块 |
---|
# VPATH 指定所有的源码路径
VPATH := $(SRCDIR)
# 提取VPATH路径中的C和C++源文件,注意这里提取的是带完整路径的,也就是不同路径下面有相同名称的源文件也不影响
SOURCES = $(foreach dir,$(VPATH),$(wildcard $(dir)/*))
C_SRCS = $(filter %.c,$(SOURCES))
CPP_SRCS = $(filter %.cpp,$(SOURCES))
# 生成对应的.o和.d文件名称
C_OBJS = $(C_SRCS:%.c=%.o)
CPP_OBJS = $(CPP_SRCS:%.cpp=%.o)
LIB_OBJS = $(C_OBJS) $(CPP_OBJS)
LIB_DEPS = $(LIB_OBJS:.o=.d)
# 包含头文件依赖
-include $(LIB_DEPS)
# -MMD用于生成.d依赖文件
.c.o:
$(CC) $(CFLAGS) -c -MMD -o $@ $<
.cpp.o:
$(GPP) $(CPPFLAGS) -c -MMD -o $@ $< |
关于隐藏gcc编译参数:
代码块 |
---|
CROSS = arm-linux-
CC = @echo " GCC $@"; $(CROSS)gcc
.c.o:
$(CC) $(CFLAGS) -c -MMD -o $@ $< |
以上只会显示arm-linux-gcc xx.o,而不会显示CFLAGS。