zoukankan      html  css  js  c++  java
  • 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)
    复制代码
  • 相关阅读:
    必须为接口 System.Collections.IComparer 实现
    C#编写的windows程序随系统启动的问题
    ReportViewer导出Excel的问题
    英语听力的技巧
    Windows中无法删除文件的解决办法
    RDLC/RDL 动态报表
    Only export to PDF format from ReportViewer addin
    提高ASP.Net网站性能
    关于Spring 国际化 No message found under code 的解决方案
    Axis2中使用WSAddressing协议
  • 原文地址:https://www.cnblogs.com/any91/p/10412267.html
Copyright © 2011-2022 走看看