首页 > 其他分享 >Makefile

Makefile

时间:2024-03-16 12:44:07浏览次数:12  
标签:shell .. APPNAME Makefile LIBRARY LIBPATH

一、什么是 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

相关文章

  • makefile =和:=的区别
    makefile=和:=的区别“=”“=”是最普通的等号,然而在Makefile中确实最容易搞错的赋值等号,使用”=”进行赋值,变量的值是整个makefile中最后被指定的值。不太容易理解,举个例子如下:VIR_A=AVIR_B=$(VIR_A)BVIR_A=AA最终VIR_B的值是AAB,因为=是所有展开最后的结果,没有......
  • 编写Makefile文件语法,持续更新中~
    一、什么是Makefile?我们写大型项目时,会用到很多源文件,源文件在不同目录中的文件夹里包含着,一个一个编译起来很麻烦,makefile就能够方便我们编译链接。使用makefile进行编译连接时会用到make命令,Makefile的会在执行make命令时指定编译和链接的规则,包括源代码文件之间的链接......
  • makefile --- 调试打印方法
    使用info/warning/error增加调试信息$(info“hereaddthedebuginfo”) info信息不打印消息所在的行号$(warning“hereaddthedebuginfo”) 打印行号,makefile继续执行$(error“error:thiswillstopthecompile”) 打印行号,停止执行打印变量的值$......
  • [转载] 跟我一起写Makefile
    目录简介概述关于程序的编译和链接makefile介绍makefile的规则一个示例make是如何工作的makefile中使用变量让make自动推导makefile的另一种风格清空目录的规则Makefile里有什么?Makefile的文件名包含其它Makefile环境变量MAKEFILESmake的工作方式书写规则规则举例规则的语法在规......
  • makefile
    makefile的三要素:目标:要生成的目标文件依赖:目标文件由哪些文件生成命令:通过执行命令由依赖文件生成目标规则:目标:依赖<Tab>命令 执行make指令,默认是生成第一个目标原理:1.当依赖文件不存在,如果有的依赖文件不存在,则向下搜索规则,看是否有生成......
  • makefile 实例: 编译libxyz.so 和 abc可执行文件。
    .PHONY:cleanallalldepall:alldepOBJDIR=Object###libxyx.so###TARGET_LIB_XYZ=libxyz.soTARGET_LIB_XYZ_OUTPUT=$(OBJDIR)/$(TARGET_LIB_XYZ)LDFLAGS+=-ltelux_wlan-lnl-3-lnl-genl-3LDFLAGS+=-L$(SDKTARGETSYSROOT)/lib-L.-rdynamicCFLAGS+=-I$(S......
  • Makefile 特殊符号
     一.@符号:    在规则运行中,表示不显示命令行本身,只显示它的结果二.自动变量:$@,$^,$<,$?,$+,$%,$*   $@:表示目标文件,或规则中的目标文件集;在模式规则中,如果有多个目标,那么,$@就是匹配于目标中模式定义的集合。  $^:表示所有的依赖文件  $<:表示第一......
  • 使用 Makefile 进行项目管理和构建
    使用Makefile进行项目管理和构建来源  https://zhuanlan.zhihu.com/p/661285050 什么是Makefile?Makefile可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译......
  • CMake构建Makefile解析
    CMake构建Makefile解析来源 https://zhuanlan.zhihu.com/p/661284197 一、CMake构建后的项目结构解析(AnalysisoftheProjectStructureAfterCMakeBuild)1.1CMake构建后的目录结构(DirectoryStructureAfterCMakeBuild)CMake构建完成后,会在项目的根目录下生成一个名为......
  • 【csh】makefile实例
    makefile实例:if(-e$1)thenforeachcell(`awk'{print}'$1`)make-f./makefileCELLNAME=$cell$argv[2-]endelsemake-f./makefileCELLNAME=$1$argv[2-]endif 重点是makefile文件可以串行提升效率: LAY_LIB="AA"SCH_LIB="BB&quo......