您的位置:首页 > 其它

Makefile模板

2016-04-30 22:46 375 查看
注:makefile中的目标不能和当前目录下的子目录重名,否则提示“make:'test'isuptodate.”

示例代码'target='_blank'>http://pan.baidu.com/s/1dFNlNVz单文件夹模板

源文件main.c

#include<stdio.h>
#include<stdlib.h>
voidmain(void)
{
printf("Iammainfunction\r\n");
}


makefile

src:=$(shellls*.c)
objs:=$(patsubst%.c,%.o,$(src))
target:=main
$(target):$(objs)
gcc-o$@$^
%.o:%.c
gcc-c-o$@$<
clean:
rm-f$(target)$(objs)


多文件夹模板

源文件main.c,test/test.c

//main.c
#include<stdio.h>
#include<stdlib.h>
#include"test/test.h"
voidmain(void)
{
printf("Iammainfunction\r\n");
}
//test/test.h
voidtest(void);
//test/test.c
#include<stdio.h>
#include<stdlib.h>
#include"test.h"
voidtest(void)
{
printf("Iamtestfunction\r\n");
}


makefile

sub_dirs:=test.
ls_tmp:=$(foreachd,$(sub_dirs),$(d)/*.c)
src:=$(shellls$(ls_tmp))
objs:=$(patsubst%.c,%.o,$(src))
target:=main
$(target):$(objs)
gcc-o$@$^
%.o:%.c
gcc-c-o$@$<
clean:
rm-f$(target)$(objs)


高级模板

###############################################################################
#
##AsmartMakefiletemplateforGNU/LINUXprogramming
#
##Author:PRC(ijkxyzATmsnDOTcom)
#Date:2011/06/17
##
##Usage:
##$makeCompileandlink(orarchive)
##$makecleanCleantheobjectivesandtarget.
################################################################################
CROSS_COMPILE=
OPTIMIZE:=-O2
WARNINGS:=-Wall-Wno-unused-Wno-format
DEFS:=
EXTRA_CFLAGS:=
INC_DIR=
SRC_DIR=
OBJ_DIR=
EXTRA_SRC=
EXCLUDE_FILES=
SUFFIX=ccppcccxx
TARGET:=
#TARGET_TYPE:=
TARGET_TYPE:=
#TARGET_TYPE:=
#####################################################################################
#Donotchangeanypartofthemunlessyouhaveunderstoodthisscriptverywell#
#Thisisakindremind.#
#####################################################################################
#FUNC#Addanewlinetotheinputstream.
defineadd_newline
$1
endef
#FUNC#setthevariable`src-x'accordingtotheinput$1
defineset_src_x
src-$1=$(filter-out$4,$(foreachd,$2,$(wildcard$d/*.$1))$(filter%.$1,$3))
endef
#FUNC#setthevariable`obj-x'accordingtotheinput$1
defineset_obj_x
obj-$1=$(patsubst%.$1,$3%.o,$(notdir$2))
endef
#VAR#Gettheuniformrepresentationoftheobjectdirectorypathname
ifneq($(OBJ_DIR),)
prefix_objdir=$(shellecho$(OBJ_DIR)|sed's:\(\./*\)*::')
prefix_objdir:=$(filter-out/,$(prefix_objdir)/)
endif
GCC:=$(CROSS_COMPILE)gcc
G++:=$(CROSS_COMPILE)g++
SRC_DIR:=$(sort.$(SRC_DIR))
inc_dir=$(foreachd,$(sort$(INC_DIR)$(SRC_DIR)),-I$d)
#--#Dosmartdeductionautomatically
$(eval$(foreachi,$(SUFFIX),$(callset_src_x,$i,$(SRC_DIR),$(EXTRA_SRC),$(EXCLUDE_FILES))))
$(eval$(foreachi,$(SUFFIX),$(callset_obj_x,$i,$(src-$i),$(prefix_objdir))))
$(eval$(foreachf,$(EXTRA_SRC),$(calladd_newline,vpath$(notdir$f)$(dir$f))))
$(eval$(foreachd,$(SRC_DIR),$(foreachi,$(SUFFIX),$(calladd_newline,vpath%.$i$d))))
all_objs=$(foreachi,$(SUFFIX),$(obj-$i))
all_srcs=$(foreachi,$(SUFFIX),$(src-$i))
CFLAGS=$(EXTRA_CFLAGS)$(WARNINGS)$(OPTIMIZE)$(DEFS)
TARGET_TYPE:=$(strip$(TARGET_TYPE))
ifeq($(filter$(TARGET_TYPE),soarapp),)
$(errorUnexpectedTARGET_TYPE`$(TARGET_TYPE)')
endif
ifeq($(TARGET_TYPE),so)
CFLAGS+=-fpic-shared
LDFLAGS+=-shared
endif
PHONY=all.mkdirclean
all:.mkdir$(TARGET)
definecmd_o
$(obj-$1):$2%.o:%.$1$(MAKEFILE_LIST)
$(GCC)$(inc_dir)-Wp,-MT,$@-Wp,-MMD,$@.d$(CFLAGS)-c-o$@$<
endef
$(eval$(foreachi,$(SUFFIX),$(callcmd_o,$i,$(prefix_objdir))))
ifeq($(TARGET_TYPE),ar)
$(TARGET):AR:=$(CROSS_COMPILE)ar
$(TARGET):$(all_objs)
rm-f$@
$(AR)rcvs$@$(all_objs)
else
$(TARGET):LD=$(if$(strip$(src-cpp)$(src-cc)$(src-cxx)),$(G++),$(GCC))
$(TARGET):$(all_objs)
$(LD)$(LDFLAGS)$(all_objs)-o$@
endif
.mkdir:
@if[!-d$(OBJ_DIR)];thenmkdir-p$(OBJ_DIR);fi
clean:
rm-f$(prefix_objdir)*.o$(TARGET)
-include$(patsubst%.o,%.o.d,$(all_objs))
.PHONY:$(PHONY)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: