zoukankan      html  css  js  c++  java
  • makefile编写差异

    由于zlib动态库在linux下引用的问题引出了对于简练的makefile的学习。之前通过看网络上的一些文章自己也算简单了解如何编写一个makefile,可总是不那么美观,今天经过辉哥的指点,对于makefile做了调整,看下两者之间的差别吧。如果有更好的方法,欢迎指点。

    第一次文件如下:

    CPP=filehead.cpp xmailuncompress.cpp zlibstrage.cpp compressfactory.cpp md5.cpp
    OBJ =  md5.o compressfactory.o filehead.o xmailuncompress.o zlibstrage.o
    
    .PHONY:ALL
    ALL: libcompress.a libcompress.so  onlyUncompress mytest
    
    HEAD =  -I./include/
    
    mytest: main.cpp
        g++ main.cpp -g -L. -lcompress   -L./so/ -llogger ${HEAD} -I. -o $@
        rm -f *.o   
        
    onlyUncompress:unCompress.cpp
        g++ unCompress.cpp -g -L. -lcompress  -L./so/ -llogger ${HEAD} -I. -o $@
    
    libcompress.a:$(OBJ)
        ar -rc libcompress.a $(OBJ) 
        
    libcompress.so:$(CPP)
        g++ -g -fPIC -shared -Wl,-rpath ./so/ -L./so -lz -llogger ${CPP} -o $@  ${HEAD}
        cp libcompress.so ./so/
    
    compressfactory.o:compressfactory.cpp
        g++ -c compressfactory.cpp ${HEAD}
    
    filehead.o:filehead.cpp
        g++  -c filehead.cpp ${HEAD}
    
    xmailuncompress.o:xmailuncompress.cpp
        g++  -c xmailuncompress.cpp ${HEAD}
    
    zlibstrage.o:zlibstrage.cpp
        g++  -c zlibstrage.cpp -L./so -lz ${HEAD}
    md5.o:md5.cpp
        g++  -c md5.cpp ${HEAD}
    
    install:
        cp libcompress.so ../libcomp/so/
        cp ./so/*.so ../libcomp/so/
        cp *.h       ../libcomp/include/
        cp ./include/* ../libcomp/include/
        
        cp *.h       ../dfs_api/include/compress/
        cp libcompress.so ../dfs_api/lib/
    
    clean:
        rm -f *.o
        rm -f libcompress.a
        rm -f mytest
        rm -f onlyUncompress
        rm -f libcompress.so

    经过修改后的makefile如下:

    CPP=main.cpp filehead.cpp xmailuncompress.cpp zlibstrage.cpp compressfactory.cpp md5.cpp
    
    FLAG= -c -g -fPIC -shared
    
    OBJ=filehead.o xmailuncompress.o zlibstrage.o compressfactory.o md5.o
    
    .PHONY:ALL
    all:libcompress.a libcompress.so  onlyUncompress mytest
    
    HEAD= -I./include/ -I.
    
    LIB= -L./ -llogger -lz
    
    mytest: main.o
        g++ $< -g -L. -lcompress  ${LIB}  ${HEAD} -I. -o $@
        rm -f *.o   
        
    onlyUncompress:unCompress.cpp
        g++ unCompress.cpp -g -L. -lcompress  ${LIB} ${HEAD} -I. -o $@
    
    libcompress.a:$(OBJ)
        ar -rc libcompress.a $(OBJ) 
        
    libcompress.so:$(OBJ)
        g++ -g -fPIC -shared -Wl,-rpath ${LIB} $(OBJ) -o $@  ${HEAD}
    
    .cpp.o:
        g++ $(HEAD) $(FLAG) -o $@ $< 
    
    install:
        cp libcompress.so ../libcomp/so/
        cp *.so ../libcomp/so/
        cp *.h       ../libcomp/include/
        cp ./include/* ../libcomp/include/
        
        cp *.h       ../dfs_api/include/compress/
        cp libcompress.so ../dfs_api/lib/
    
    clean:
        rm -f *.o
        rm -f libcompress.a
        rm -f mytest
        rm -f onlyUncompress
        rm -f libcompress.so

    两者对比来看是不是后者清晰简练不少微笑

    顺带的了解了两个小的知识点:

    在makefile中$>代表引用“:”后的内容,,,$@引用“:”前的内容

  • 相关阅读:
    web安全记录
    jquery uploadify插件多文件上传
    在java中生成二维码,并直接输出到jsp页面
    条形码/二维码之开源利器ZXing图文介绍
    FCKeditor插件开发实例:uploadify多文件上传插件
    FCKeditor 插件开发 示例
    Spring技术_邮箱注册_激活_获取验证码
    jquery的uploadify上传jsp+servlet
    PHP变量类型
    thinkphp环境变量配置
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3329161.html
Copyright © 2011-2022 走看看