• makefile  模板 (template)


     本文把makefile 分成了三份:生成可执行文件的makefile,生成静态链接库的makefile,生成动态链接库的makefile

      这些makefile都很简单,一般都是一看就会用,用法也很容易,只需要把它们拷贝到你的代码的同一目录下,然后就可以用 make 来生成目标文件了。

      下面是三个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 rebuild
      
    everything : $(TARGET)
      
    all : $(TARGET)
      
    objs : $(OBJS)
      
    rebuild: veryclean everything
                    
    clean :
        rm -fr *.so
        rm -fr *.o
        
    veryclean : clean
        rm -fr $(TARGET)
      
    $(TARGET) : $(OBJS)
        $(CC) $(CXXFLAGS) -o $@ $(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 rebuild
      
    everything : $(TARGET)
      
    all : $(TARGET)
      
    objs : $(OBJS)
      
    rebuild: veryclean everything
                    
    clean :
        rm -fr *.o
        
    veryclean : 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 rebuild
      
    everything : $(TARGET)
      
    all : $(TARGET)
      
    objs : $(OBJS)
      
    rebuild: veryclean everything
                    
    clean :
        rm -fr *.o
        
    veryclean : clean
        rm -fr $(TARGET)
      
    $(TARGET) : $(OBJS)
        $(CC) $(CXXFLAGS) $(SHARE) $@ $(OBJS) $(LDFLAGS) $(LIBS)
    复制代码

     






  • 相关阅读:
    Java中类的继承
    信号量、PV原语及其应用
    Python-subprocess执行命令并将输出劫持实现实时记录到日志
    Python-logging模块定制格式描述符实现定长日志等级
    Python-logging模块实现同时向控制台和文件打印日志
    SpringBoot学习笔记(二)
    Kubernetes学习日记(四)
    Kubernetes学习日记(三)
    SpringBoot学习笔记(一)
    Kubernetes学习日记(二)
  • 原文地址:https://www.cnblogs.com/jins-note/p/9513563.html
Copyright © 2020-2023  润新知