RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
Makefile简单实战
  • 作者:zhaozj
  • 发表时间:2020-12-23 10:55
  • 来源:未知

make命令时gnu组织提供的创建软件包的命令。在执行make时,它会自动寻找Makefile或者makefile文件,并执行其中定义的创建过程。makefile文件支持shell编程的语法,由一组创建软件包的规则组成,规则的格式如下:target : dependency dependency [...]  command  command  [...]target表示make命令要执行的目标。dependency表示执行该目标时需要依赖的对象,多个依赖对象之间使用空格符隔开。command表示执行目标时使用的命令,多个comman是使用多行表示。需要注意的是,command行之前必须留有8个字符的空格,也就是一个tab键所占的长度,否则,Makefile文件常常被认为已经损坏、无法使用。编写makefile时的通常的方法:一、定义变量定义变量可以让makefile文件看起来显得更简洁和规范,变量的定义遵循shell编程规范。比如:CC = g++C = gcc再定义一个源文件变量:SOURCES = main.cpp precompile.cpp如果你想在结尾换行换行,那么就在结尾加上反斜杠“/",比如:SOURCES = main.cpp/  precompile.cpp二、定义创建规则将变量按照需要组合,按照创建规则的格式书写出来,就可以形成完整的makefile文件了。比如:${OBJECTS} : ${SOURCES}             $(CC) -c $(CFLAGS) $(INCLUDES) ${SOURCES}这个规则的意思是:要创建${OBJECTS},不仅需要依赖${SOURCES},还要执行命令$(CC) -c $(CFLAGS) $(INCLUDES) ${SOURCES},这个规则中的$(XX)都表示引用我们刚才定义的变量。

下面用一个简单的实例讲一下如何制作一个makefile,期间我会使用注释(#)进行讲解。

#定义编译器的命令名变量。CC=g++

#定义编译器选项变量。CFLAGS = -g

#定义include文件或文件夹变量,#-I表示include选项,-I之后的include的实际内容。INCLUDES = -I. -I/usr/lib

#定义库文件或文件夹变量。LIBS = -L.

#定义输出文件名PRG = testit

#定义源文件列表变量,多个文件安直接使用空格分开。SOURCES = main.cpp/  precompile.cpp

#定义目标文件列表变量,多个文件安直接使用空格分开,#文件的先后顺序要与定义SOURCES变量时一致。OBJECTS = main.o/  precompile.o#规则all,它依赖于${PRG}规则,没有执行命令。all : ${PRG}

#规则${PRG},它依赖于${OBJECTS}规则,#并执行将目标文件连接成程序文件的命令。${PRG} : ${OBJECTS}                ${CC} -o ${PRG} ${OBJECTS} ${LIBS}#规则${OBJECTS},它依赖于${SOURCES}变量,#并执行将源文件编译成目标文件的命令。${OBJECTS} : ${SOURCES}               $(CC) -c $(CFLAGS) $(INCLUDES) ${SOURCES}#规则clean,它不依赖于别的规则,#执行强行清空目标文件和core dump文件的命令。clean :