• 【转】Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)


    Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)

    本文把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)
    

    https://blog.csdn.net/real_myth/article/details/72633320

  • 相关阅读:
    Ubuntu打开终端的方法三种
    javascript 获取随机数
    HTML5中类jQuery选择器querySelector的使用
    PHP stream_context_create()作用和用法分析
    一些常用的api接口、
    怎么样学好C++
    指针访问与数组访问的效率分析
    架构师
    Java 之 StringTokenizer
    类型转换操作符static_cast、const_cast、dynamic_cast、reinterpret_cast
  • 原文地址:https://www.cnblogs.com/michaelcjl/p/14671866.html
Copyright © 2020-2023  润新知