3年多没有在CSDN上传资源了。如今上传一个
http://download.csdn.net/detail/lzwml/7811445
对于大型工程源代码最好分目录存放便于管理,但是编写makefile就相对麻烦点。
这里是我写的一个makefile demo,它的关键之处在编译前导入config_xxx_file_list.mk,这个文件可以看成是IDE环境的代码目录树。具体怎么修改这个目录树相信打开文件大家都能看懂。
该实例包含两个工程,LibMakefile.mk和AppMakefile.mk
LibMakefile.mk导入config_lib_file_list.mk目录树,生成一个lib/libdemo.so动态链接库
AppMakefile.mk导入config_app_file_list.mk目录树,生成一个release/download.elf文件
测试方法
1、make -f LibMakefile.mk
2、make -f AppMakefile.mk因为编译download.elf时需要libdemo.so,所以必须先生成libdemo.so
3、./release/download.elf输出
I'm f1_1
I'm f2_1 in libdemo.so/a
I'm f2_2 in libdemo.so/a
I'm logo0
I'm logo1
I'm logo2
I'm logo3
I'm logolib in lib
下载版本有个2BUG,
OBJS = $(patsubst %S,o,\
$(patsubst %.c,%.o,$(SRCS)))
改成
OBJS = $(patsubst %.S,%.o,\
$(patsubst %.c,%.o,$(SRCS)))
否则不能支持.S文件编译,S是大写
目录格式修改
_NAMEDIR_CUR_ = name_dir0
DIR_$(_NAMEDIR_CUR_) = ./
SRCS_$(_NAMEDIR_CUR_) = main.c
SRCS += $(foreach TMP, \
$(SRCS_$(_NAMEDIR_CUR_)), \
$(DIR_$(_NAMEDIR_CUR_))/$(TMP))
改成
_NAMEDIR_CUR_ = name_dir0
DIR_$(_NAMEDIR_CUR_) =
SRCS_$(_NAMEDIR_CUR_) = main.c
SRCS += $(foreach TMP, \
$(SRCS_$(_NAMEDIR_CUR_)), \
$(DIR_$(_NAMEDIR_CUR_))$(TMP))
不然arm-linux-ld 不能识别 .//main.o 连接过程会有问题,去掉 .// 就好了