Linux下用Makefile制作动态库和静态库并编译生成可执行程序

Makefile
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。 所要完成的Makefile 文件描述了整个工程的编译、连接等规则。

Makefile实例与使用
[dinghuanhuan@centos6 link]$ vim makefile
makefile中代码:

APPNAME=link
LIB_SRCS=linker.c
LIB_NAME=linker
LIB_PATH=.libs

CFLAGS+=-I${LIB_PATH}
LDFLAGS+=-L${LIB_PATH} -l${LIB_NAME}

all: clean static_lib shared_lib install
    gcc ${CFLAGS} main.c -o ${APPNAME}_static ${LDFLAGS} -static
    gcc ${CFLAGS} main.c -o ${APPNAME}_shared ${LDFLAGS} 
    rm -f *.o

static_lib: linker.c
    gcc -c ${LIB_SRCS}
    ar -rcs lib${LIB_NAME}.a *.o
    rm -f *.o

shared_lib: 
     gcc -fPIC -shared ${LIB_SRCS}  -o lib${LIB_NAME}.so

clean:
     rm -rf *.o

distclean:
    rm -rf .libs
    rm -rf ${APPNAME}_*

install:
    mkdir -p ${LIB_PATH}
    mv lib${LIB_NAME}.* ${LIB_PATH}
    cp linker.h ${LIB_PATH}

这里写图片描述

[dinghuanhuan@centos6 linker]$ make
找makefile执行总的目标 为all 有依赖的情况下先执行依赖的内容再执行总的目标里面的内容。

[dinghuanhuan@centos6 linker]$ make clean
执行makefile文件中的clean目标

猜你喜欢

转载自blog.csdn.net/m0_38022615/article/details/79110938