一、什么是 Makefile?
描述了整个工程的编译、链接规则。当源码文件比较多的时候就不适合通过输入 gcc 命令来编译,Makefile 文件描述了编译哪些源码文件、如何编译,每次需要编译工程时只需要使用这个文件就行了。
注意:Makefile 中空出来的部分用 Tab 键,不能用空格;注释用 “#”,不能用 “//”。
使用 Makefile 的方法:直接在命令行中输入 “make”,make 命令会在当前目录下查找是否存在 Makefile 文件。
APPNAME=server
LIBPATH=`pwd`/../lib/
CFLAGS+=-I${LIBPATH}
CFLAGS+=-I ../../../sqlite/include/
LDFLAGS+=-L${LIBPATH}
LDFLAGS+=-L ../../../sqlite/lib/
CC=gcc
all:
${CC} ${CFLAGS} main.c -o ${APPNAME} ${LDFLAGS} -lmy_server -lsqlite3
clean:
rm -f ${APPNAME}
run:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:LIBPATH && ./${APPNAME} -p 12345
另外还需要注意的是:makefile里每一个指令是一个独立的进程,export这一行是一个进程,export是临时改变环境变量,它结束了以后,对于下一行执行的这个进程来说,环境变量其实并没有改变
二、makefile和shell脚本的区别
1、什么是 shell 脚本?
我们如果要实现一个需求,需要在 shell 窗口中输入很多命令,可以直接在 shell 窗口中输入,但每次用到相同的需求时都需要重新敲,我们可以把这些命令记录在一个文档中,然后去执行这个文档中的命令,这样就能一步操作完成。
1、shell 脚本就是一些命令的集合,它是个纯文本文件,命令从上而下,一行一行的开始执行。
2、shell 脚本提供数组、循环、条件判断等功能。
3、shell 脚本扩展名为 .sh。
注意:shell 脚本第一行一定要为: #!/bin/bash -------> 表示使用 bash
使用 Shell 脚本的方法:给 .sh 文件提供可执行权限 chmod +x ./xxx.sh
2、区别
1、通配符区别
shell 中通配符 * 表示所有的字符
Makefile 中通配符 % 表示所有的字符
2、shell 不允许 “=” 号两边有空格;Makefile 允许变量赋值时,“=” 号两边留空格。
3、命令和变量的引用
shell $() 放命令,${} 放变量
Makefile $() 和 ${} 都能进行取变量值
三、Makefile 和 shell文件互相调用
1、shell 文件内调用makefile文件
#!/bin/bash
make
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:`pwd`/../lib/
./server -p 12345
2、makefile文件内调用shell 文件
APPNAME=server
LIBPATH=`pwd`/../lib/
CFLAGS+=-I${LIBPATH}
CFLAGS+=-I ../../../sqlite/include/
LDFLAGS+=-L${LIBPATH}
LDFLAGS+=-L ../../../sqlite/lib/
CC=gcc
all:
${CC} ${CFLAGS} main.c -o ${APPNAME} ${LDFLAGS} -lmy_server -lsqlite3
clean:
rm -f ${APPNAME}
run:
#export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:LIBPATH && ./${APPNAME} -p 12345
./test.sh
标签:shell,..,APPNAME,Makefile,LIBRARY,LIBPATH
From: https://www.cnblogs.com/LiBlog--/p/18072903