zoukankan      html  css  js  c++  java
  • makefile

    示例Makefile

     #rule.make

    CC=g++
    MAKE=make
    AR=ar cr
    RM=rm -rf
    
    #CFLAGS+=-Wall
    
    OBJDIR=.out
    SRCSCPP=$(wildcard *.cpp)
    SRCSC=$(wildcard *.c)
    OBJS=$(SRCSCPP:%.cpp=$(OBJDIR)/%.o) $(SRCSC:%.c=$(OBJDIR)/%.o)
    DEPENDS=$(SRCSCPP:%.cpp=$(OBJDIR)/%.d) $(SRCSC:%.c=$(OBJDIR)/%.d)
    
    .PONEY: clean  all
    
    all:$(TARGET)  $(LIB) subdirs $(DEPENDS)
    
    $(LIB):$(OBJS) 
        @mkdir -p $(LIBPATH)
        @$(AR)  $(LIBPATH)/$@  $^
        @echo create $@
    
    $(TARGET):$(OBJS)
        @mkdir -p $(EXEPATH)
        @$(CC) -o $(EXEPATH)/$@ $^ $(LDFLAGS)
        @echo create $@
    
    subdirs:$(SUBDIRS)
        @for dir in $(SUBDIRS);
        do $(MAKE) -C $$dir all||exit 1;
        done
    
    $(OBJDIR)/%.o:%.cpp $(OBJDIR)/%.d
        @mkdir -p $(OBJDIR)
        @$(CC) -c $< -o $@ $(CFLAGS)
        @echo "Compile $<"
    
    $(OBJDIR)/%.o:%.c $(OBJDIR)/%.d
        @mkdir -p $(OBJDIR)
        @$(CC) -c $< -o $@ $(CFLAGS)
        @echo "Compile $<"
    
    #-include $(DEPENDS)
    
    $(OBJDIR)/%.d:%.c
        @mkdir -p $(OBJDIR)
        @set -e; rm -f $@;
        $(CC) -MM $(CFLAGS) $< > $@.$$$$;
        sed 's,($*).o[ :]*,1.o $@ : ,g' < $@.$$$$ > $@;
        rm -f $@.$$$$
    
    $(OBJDIR)/%.d:%.cpp
        @mkdir -p $(OBJDIR)
        @set -e; rm -f $@;
        $(CC) -MM $(CFLAGS) $< > $@.$$$$;
        sed 's,($*).o[ :]*,1.o $@ : ,g' < $@.$$$$ > $@;
        rm -f $@.$$$$
    
    clean:
        @for dir in $(SUBDIRS);
        do 
        echo "clean dir $$dir";
        $(MAKE) -C $$dir clean||exit 1;
        done
        @-$(RM) $(TARGET) $(LIB)  $(OBJDIR)

    #Makefile lib

    TOPDIR=..
    
    LIB=libsourcecmd.a
    
    LIBPATH=$(TOPDIR)/.lib/
    
    CFLAGS= -I./
            -I../../comm/libs/utils
            -I../../comm/libs3/mysql/include
            -I../../comm/libs3
            -I../../comm/libs3/libuv-1.x/include
    
    
    include $(TOPDIR)/rules.make

    #Makefile exe

    TOPDIR=..
    
    TARGET=cmu
    
    EXEPATH=$(TOPDIR)/bin
    
    LIBPATH=-L$(TOPDIR)/.lib
            -L../../comm/libs3/libuv-1.x/.libs
            -L../../comm/share/.lib
            -L../../comm/libs/asio/.lib
            -L../../comm/libs/db/.lib
            -L/usr/lib64/mysql
    
    CFLAGS= -I./
            -I../../comm/libs/utils
            -I../../comm/libs3/mysql/include
            -I../../comm/libs3
            -I../../comm/libs3/libuv-1.x/include
            
            
    LDFLAGS= $(LIBPATH) -lsourcecmd -lsourcedb -ldb -lasio -lshare -lm -ldl -lpthread -luv -lmysqlclient
    
    
    include $(TOPDIR)/rules.make

    说明:

    include $(DEPENDS)包含头文件依赖文件很多事是会导致反应慢和两次进入子目录问题

    一个直接编译多个目录下文件的makefile

    CC=g++
    MAKE=make
    AR=ar cr
    RM=rm -rf
    
    #CFLAGS+=-Wall
    
    LIBPATH=-L../comm/libs3/libuv-1.x/.libs
            -L../comm/share/.lib
            -L../comm/libs/asio/.lib
            -L../comm/libs/db/.lib
            -L/usr/lib64/mysql
    
    CFLAGS= -I./
            -I../comm/libs/utils
            -I../comm/libs3/mysql/include
            -I../comm/libs3
            -I../comm/libs3/libuv-1.x/include
            
    LDFLAGS= $(LIBPATH) -lm -ldl -lpthread -luv -lmysqlclient        
    
    SRCSCPP=$(wildcard ../comm/libs/asio/*.cpp)
            $(wildcard ../comm/libs/db/*.cpp)
            $(wildcard ../comm/share/*.cpp)
            $(wildcard sourcecmd/*.cpp)
            $(wildcard sourcedb/*.cpp)
            $(wildcard source/*.cpp)
    
    
    OBJS=$(SRCSCPP:%.cpp=%.o) 
    
    TARGET=test
    
    all:$(TARGET) 
    
    
    $(TARGET):$(OBJS)
        @$(CC) -o $(EXEPATH)/$@ $^ $(LDFLAGS)
        @echo create $@
    
    
    %.o:%.cpp 
        @$(CC) -c $< -o $@ $(CFLAGS)
        @echo "Compile $<"
    
    
    clean:
        @-$(RM) $(TARGET) $(OBJS) 

     头文件依赖关系另外的写法:

    %.d:%.cpp
        $(GCC) -MM -MT "$*.o $*.d" $(INCS) $< >$@

    文件排除

    SRC := $(filter-out a.cpp b.cpp, $(SRC))

    Make will set the special variable MAKECMDGOALS to the list of goals you specified on the command line. If no goals were given on the command line, this variable is empty. Note that this variable should be used only in special circumstances.

     参考:

    头文件依赖关系

    https://blog.csdn.net/dragon101788/article/details/30580349

    层级makefile

    https://www.cnblogs.com/coderkian/p/3479564.html

  • 相关阅读:
    sp_executesql介绍和使用
    jQuery中的 return false, e.preventDefault(), e.stopPropagation()的区别
    clearfix:after 清除css浮动
    paip.mysql 性能跟iops的以及硬盘缓存的关系
    paip.mysql 性能测试 报告 home right
    paip.mysql 性能测试by mysqlslap
    paip.java 架构师之路以及java高级技术
    paip. 提升性能---hibernate的缓存使用 总结
    paip. 解决php 以及 python 连接access无效的参数量。参数不足,期待是 1”的错误
    paip.解决access出现 -2147467259 无效的参数量
  • 原文地址:https://www.cnblogs.com/mingzhang/p/11308337.html
Copyright © 2011-2022 走看看