Linux学习:Makefile 模板(动态库、静态库、可执行程序)

1、编译动态库

    #############################################################
    # Makefile for shared library.
    # 编译动态链接库
    #############################################################
    #set your own environment option
    CC = g++
    CC_FLAG = -D_NOMNG -D_FILELINE  

    #set your inc and lib
    INC =
    LIB = -lpthread -L./ -lsvrtool  

    #make target lib and relevant obj
    PRG = libsvrtool.so
    OBJ = Log.o  

    #all target
    all:$(PRG)  

    $(PRG):$(OBJ)
        $(CC) -shared -o [email protected] $(OBJ) $(LIB)  

    .SUFFIXES: .c .o .cpp
    .cpp.o:
        $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o  

    .PRONY:clean
    clean:
        @echo "Removing linked and compiled files......;
        rm -f $(OBJ) $(PRG)  

2、编译静态库

    #############################################################
    # Makefile for static library.
    # 编译静态链接库
    #############################################################
    #set your own environment option
    CC = g++
    CC_FLAG = -D_NOMNG -D_FILELINE  

    #static library use ‘ar‘ command
    AR = ar  

    #set your inc and lib
    INC =
    LIB = -lpthread -L./ -lsvrtool  

    #make target lib and relevant obj
    PRG = libsvrtool.a
    OBJ = Log.o  

    #all target
    all:$(PRG)
    $(PRG):$(OBJ)
        ${AR} rv ${PRG} $?  

    .SUFFIXES: .c .o .cpp
    .cpp.o:
        $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o  

    .PRONY:clean
    clean:
        @echo "Removing linked and compiled files......"
        rm -f $(OBJ) $(PRG)  

3、可执行程序

    ###########################################
    #Makefile for simple programs
    ###########################################
    INC=
    LIB= -lpthread  

    CC=CC
    CC_FLAG=-Wall  

    PRG=threadpooltest
    OBJ=CThreadManage.o CThreadPool.o CThread.o CWorkerThread.o threadpooltest.o  

    $(PRG):$(OBJ)
        $(CC) $(INC) $(LIB) -o [email protected] $(OBJ)  

    .SUFFIXES: .c .o .cpp
    .cpp.o:
        $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o  

    .PRONY:clean
    clean:
        @echo "Removing linked and compiled files......"
        rm -f $(OBJ) $(PRG)  

原文地址:https://www.cnblogs.com/blogs-of-lxl/p/11244008.html

时间: 2024-11-01 11:22:29

Linux学习:Makefile 模板(动态库、静态库、可执行程序)的相关文章

Linux 下动态库 / 静态库(依赖)

一. 依赖动态库的动态库 libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而main.exe又调用了libfun.so的函数int nothing(). 下面两种方式都能工作: 1> 常用的方式 g++ -shared -fPIC -o libtest.so test.cpp g++ -shared -fPIC -o libfun.so function.cpp  -L./ -I

[转]Linux下用gcc/g++生成静态库和动态库(Z)

Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10|  分类: linux |  标签:链接库  linux  g++  gcc  |举报|字号 订阅 在 linux 下,库文件一般放在 /usr/lib 和 /lib 下, 静态库的名字一般为 libxxxx.a ,其中 xxxx 是该 lib 的名称 动态库的名字一般为 libxxxx.so.major.minor , xxxx 是该 lib 的名称, major 是主版本号, minor 是副版本号

Linux 动态库 静态库

什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和Linux的本质不同,因此二者库的二进制是不兼容的.Linux操作系统支持的库函数分为静态库和动态库,动态库又称共享库.Linux系统有几个重要的目录存放相应的库函数,如/lib,/usr/lib;头文件放在/usr/include. 什么是静态库 静态库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都被整合进目标代码中,他的优点就显而易见了,即编译后的执

linux下编译qt5.6.0静态库——configure配置

 随笔 - 116  文章 - 4  评论 - 7 linux下编译qt5.6.0静态库--configure配置 linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberry选项: Android 选项: 生成makefile 遇到链接检查失败的情况 生成makefile后进行编译 编译时的错误 多重定义'QT_MODBUS()'和'QT_MODBU

C++基础知识之动态库静态库

一. 静态库与动态库 库(library),一般是一种可执行的二进制格式,被操作系统载入内存执行. 我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库 静态库和动态库区别: 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.因此,使用了静态库的可执行程序存储在磁盘上的空间就比较大. 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在. 静态库和动态库命名规范: linux: 静态库文件名的命名规范是

动态库静态库差异对比

最近在做一个项目需要http接口,由此将框架中依赖libcurl的http单独拿来用 libcurl提供两种库:静态库跟动态库,首先curl目下只提供了libcurl.a,并没有生成libcurl.so,由此开始编译依赖静态的http.sog++ -shared -fPIC -o lib/libhttp.so http_handle.cpp -I./ -I./curl-7.34.0/include -L./ -lcurl ./lib/libhttp.so: undefined reference

c/c++:动态库 静态库 linux/windows 例子 (转)

作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). C++静态库与动态库 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自我修养——链接.装载与库>. 什么是库 库是写好的现有的,成熟的,可以复用的代码.现实中每

Linux下Gcc生成和使用静态库和动态库详解

参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主要是编译器.汇编器和连接器的不同),因此二者库的二进制是不兼容的. 本文仅限于介绍linux下的库. 1.2库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同

【转】Linux下gcc生成和使用静态库和动态库详解

一.基本概念 1.1 什么是库 在Windows平台和Linux平台下都大量存在着库. 本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主要是编译器.汇编器和连接器的不同),因此二者的库的二进制是不兼容的. 本文仅限于介绍linux下的库. 1.2 库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大. 共享库的代码是在可

Linux GCC编译使用动态、静态链接库 (转)

原文出处:http://blog.csdn.net/a600423444/article/details/7206015 在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.so作后缀的文件. 动态链接库的好处就是节省内存空间. 1.Linux下创建动态链接库 在使用GCC编译程序时,只需加上-shared选项即可,这样生成的执行程序即为动态链接库. 例如有文件:hello.c x.h main.c [plain] view plaincopy 编译:gcc hello.