• 我所使用的一个通用的Makefile模板


    话不多说,请看:

    我的项目有的目录结构有:

    dirls/
    ├── include
    │   └── apue.h
    ├── lib
    │   ├── error.c
    │   ├── error.o
    │   └── Makefile
    ├── src
    │   ├── dirls.c
    │   ├── dirls.out
    │   └── Makefile
    └── test_client

    而我的Makefile模板代码如下:

    SRCS = $(wildcard *.c ../lib/*.c)    #wildcard把 指定目录 ./ 和 ../lib 下的所有后缀是c的文件全部展开。
    
    OBJS = $(SRCS:.c = .o)    #OBJS将$(SRCS)下的.c文件转化为.o文件
    
    CC = gcc   #代表所使用的编译器
    
    INCLUDES = -I../include    #头文件查找路径
               -I. 
    
    LIBS = -L../lib    #链接库查找地址
    
    CCFLAGS = -g -Wall -O0   #附加参数
    
    OUTPUT = dirls.out   #输出程序名称
    
    all:$(OUTPUT)
    
    $(OUTPUT) : $(OBJS)
        $(CC) $^ -o $@ $(INCLUDES) $(LIBS)
    
    %.o : %.c
        $(CC) -c $< $(CCFLAGS)
    
    clean:
        rm -rf *.out *.o    #清除中间文件及生成文件
    
    .PHONY:clean

    另外附上别的网站的几个Makefile模板:

    1、编译动态库

    ############################################################# 
    # Makefile for shared library.
    # 编译动态链接库
    #############################################################
    #set your own environment option
    CC = g++
    CC_FLAG = -D_NOMNG -D_FILELINE
    
    #set your inc and lib
    INC = 
    LIB = -lpthread -L./ -lsvrtool
    
    #make target lib and relevant obj 
    PRG = libsvrtool.so
    OBJ = Log.o
    
    #all target
    all:$(PRG)
    
    $(PRG):$(OBJ)
        $(CC) -shared -o $@ $(OBJ) $(LIB)
    
    .SUFFIXES: .c .o .cpp
    .cpp.o:
        $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
    
    .PRONY:clean
    clean:
        @echo "Removing linked and compiled files......;
        rm -f $(OBJ) $(PRG)

    2、编译静态库

    #############################################################
    # Makefile for static library.
    # 编译静态链接库
    #############################################################
    #set your own environment option
    CC = g++
    CC_FLAG = -D_NOMNG -D_FILELINE
    
    #static library use 'ar' command 
    AR = ar
    
    #set your inc and lib
    INC = 
    LIB = -lpthread -L./ -lsvrtool
    
    #make target lib and relevant obj 
    PRG = libsvrtool.a
    OBJ = Log.o
    
    #all target
    all:$(PRG)
    $(PRG):$(OBJ)
        ${AR} rv ${PRG} $?
    
    .SUFFIXES: .c .o .cpp
    .cpp.o:
        $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
    
    .PRONY:clean
    clean:
        @echo "Removing linked and compiled files......"
        rm -f $(OBJ) $(PRG)

    3、可执行程序

    ###########################################
    #Makefile for simple programs
    ###########################################
    INC=
    LIB= -lpthread
    
    CC=CC
    CC_FLAG=-Wall
    
    PRG=threadpooltest
    OBJ=CThreadManage.o CThreadPool.o CThread.o CWorkerThread.o threadpooltest.o
    
    $(PRG):$(OBJ)
        $(CC) $(INC) $(LIB) -o $@ $(OBJ)
        
    .SUFFIXES: .c .o .cpp
    .cpp.o:
        $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
    
    .PRONY:clean
    clean:
        @echo "Removing linked and compiled files......"
        rm -f $(OBJ) $(PRG)
  • 相关阅读:
    OC MRC之循环引用问题(代码分析)
    OC MRC之 @property参数(代码分析)
    OC MRC之set方法内存管理(代码分析)
    OC MRC之多对象之间管理(代码分析)
    OC MRC之计数器的基本操作(代码分析)
    最流行的android组件大全
    Android主题切换方案总结
    Picasso – Android系统的图片下载和缓存类库
    Android无法导入下载好的项目(和Eclipse中已经存在的项目命名一样导致冲突)解决办法
    Android Studio 简单设置
  • 原文地址:https://www.cnblogs.com/sysu-blackbear/p/4034394.html
Copyright © 2020-2023  润新知