常用的makefile模板

阅读更多

 

  • 下面是三个makefile的源代码:


    1、生成可执行文件的makefile ######################################
    #
    ######################################
    #source file
    #源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件
    SOURCE:= $(wildcard *.c) $(wildcard *.cpp)
    OBJS:= $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))#target you can change test to what you want
    #目标文件名,输入任意你想要的执行文件名
    TARGET:= test#compile and lib parameter
    #编译参数
    CC:= gcc
    LIBS:=
    LDFLAGS :=
    DEFINES :=
    INCLUDE := -I.
    CFLAGS:= -g -Wall -O3 $(DEFINES) $(INCLUDE)
    CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H#i think you should do anything here
    #下面的基本上不需要做任何改动了
    .PHONY : everything objs clean veryclean rebuildeverything : $(TARGET)all : $(TARGET)objs : $(OBJS)rebuild: veryclean everythingclean :
    rm -fr *.so
    rm -fr *.overyclean : clean
    rm -fr $(TARGET)$(TARGET) : $(OBJS)
    $(CC) $(CXXFLAGS) -o [email protected] $(OBJS) $(LDFLAGS) $(LIBS)2、生成静态链接库的makefile ######################################
    #
    #
    #######################################target you can change test to what you want
    #共享库文件名,lib*.a
    TARGET:= libtest.a#compile and lib parameter
    #编译参数
    CC:= gcc
    AR= ar
    RANLIB= ranlib
    LIBS:=
    LDFLAGS :=
    DEFINES :=
    INCLUDE := -I.
    CFLAGS:= -g -Wall -O3 $(DEFINES) $(INCLUDE)
    CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H#i think you should do anything here
    #下面的基本上不需要做任何改动了#source file
    #源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件
    SOURCE:= $(wildcard *.c) $(wildcard *.cpp)
    OBJS:= $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE))).PHONY : everything objs clean veryclean rebuildeverything : $(TARGET)all : $(TARGET)objs : $(OBJS)rebuild: veryclean everythingclean :
    rm -fr *.overyclean : clean
    rm -fr $(TARGET)$(TARGET) : $(OBJS)
    $(AR) cru $(TARGET) $(OBJS)
    $(RANLIB) $(TARGET)

     


    3、生成动态链接库的makefile ######################################
    #
    #
    #######################################target you can change test to what you want
    #共享库文件名,lib*.so
    TARGET:= libtest.so#compile and lib parameter
    #编译参数
    CC:= gcc
    LIBS:=
    LDFLAGS :=
    DEFINES :=
    INCLUDE := -I.
    CFLAGS:= -g -Wall -O3 $(DEFINES) $(INCLUDE)
    CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H
    SHARE := -fPIC -shared -o#i think you should do anything here
    #下面的基本上不需要做任何改动了#source file
    #源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件
    SOURCE:= $(wildcard *.c) $(wildcard *.cpp)
    OBJS:= $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE))).PHONY : everything objs clean veryclean rebuildeverything : $(TARGET)all : $(TARGET)objs : $(OBJS)rebuild: veryclean everythingclean :
    rm -fr *.overyclean : clean
    rm -fr $(TARGET) : $(OBJS)
    $(CC) $(CXXFLAGS) $(SHARE)  $(TARGET)  $(OBJS) $(LDFLAGS) $(LIBS)

4、自己用的一个生成so库的例子

CC = g++
CCFLAGS = -fPIC -Wall -c -fmessage-length=0 -D_NOMNG -D_FILELINE 
LIBPATH=-L../lib
SHARE=-fPIC -shared -o
INCLUDE=-I../include
SRC=../src
#wildcard:将符合规则所有的文件以空格为间隔连接起来
SOURCE:=$(wildcard $(SRC)/*.c) $(wildcard $(SRC)/*.cpp)
#patsubst:后边接三个参数,第三个是源字符串,查找源中以空格或者tab、换行分割的单词
#将适配第一个参数模式的单词,替换成第二个参数的模式
OBJS:= $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
#$(warning $(SOURCE))
#$(warning $(OBJS))

libs=-lWordSeggerInterface

TARGET=libSegmentJNIWrapper.so



#.SUFFIXES: .c .o .cpp 
#$(OBJS): 
.cpp.o:
    $(CC) $(CCFLAGS) $(INCLUDE) -c $*.cpp -o $*.o
build:$(TARGET)
all:$(TARGET)

$(TARGET):$(OBJS) 
    $(CC) $(LIBPATH) $(SHARE) $(TARGET) $(OBJS) $(libs)
#伪目标.PRONY,就算有clean文件,也会执行clean命令
.PRONY:clean 
clean: 
    @echo "rm -rf "$(OBJS)" "$(TARGET)
    rm -f $(OBJS) $(TARGET)

你可能感兴趣的:(常用的makefile模板)