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中$>代表引用“:”后的内容,,,$@引用“:”前的内容

  • 相关阅读:
    递归函数及Java范例
    笔记本的硬盘坏了
    “References to generic type List should be parameterized”
    配置管理软件(configuration management software)介绍
    WinCE文件目录定制及内存调整
    使用Silverlight for Embedded开发绚丽的界面(3)
    wince国际化语言支持
    Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
    WinCE Heartbeat Message的实现
    使用Silverlight for Embedded开发绚丽的界面(2)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3329161.html
Copyright © 2011-2022 走看看