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目标