ui设计师个人网站,网站建设合同书简单版,住房和城乡建设行业证书,网页美工设计中使用的主要软件是Makefile文件用于管理和组织代码工程的编译和链接#xff0c;需要被make工具解析并完成相关的动作。 1、文件包含#xff1a; 语法#xff1a;include 文件名 作用#xff1a;将其它makefile文件包含进来#xff0c;组成一个更大的makefile文件#xff0c;这样有利于make…Makefile文件用于管理和组织代码工程的编译和链接需要被make工具解析并完成相关的动作。 1、文件包含 ·语法include 文件名 ·作用将其它makefile文件包含进来组成一个更大的makefile文件这样有利于makefile模块化编程。通常我们将一些配置选项分开成一个独立的makefile文件这样有利于makefile文件的管理或将模块代码的依赖关系和需要编译的文件信息独自写到一个 makefile文件中最终通过include命令形成一个顶层makefile文件来完成整个工程代码的编译和链接。 2、变量定义 ·语法变量名 : 变量值 ·在makefile中经常需先定义一个变量然后往该变量中追加新的值通过符号。 ·例如先定义一个C_SRCS变量该值可以为空然后将代码文件test1.c和test2.c添加到C_SRCS中 C_SRCS : C_SRCS test1.c test2.c ·在makefile中有一类特殊的变量其名称为自动变量自动变量的值会依据规则中的target(目标) 和 prerequisites(前提)自动计算其值自动变量一般以开头$为起始下面将列出一些常见的自动变量 $为规则中的target名称 为规则中第一个 p r e r e q u i s i t e s 名称 3 、内置命令 ⋅ M a k e f i l e 中内置了一些常用的命令有字符串处理函数 s u b s t 、 p a t s u b s t 、 s t r i p 、 f i n d s t r i n g 、 f i l t e r 、 f i l t e r − o u t 、 s o r t 、 w o r d 、 w o r d l i s t 、 w o r d s 、 f i r s t w o r d 、 l a s t w o r d 文件名处理函数 d i r 、 n o t d i r 、 s u f f i x 、 b a s e n a m e 、 a d d s u f f i x 、 a d d p r e f i x 、 j o i n 、 w i l d c a r d 、 r e a l p a t h 、 a b s p a t h 条件处理函数 i f 循环处理函数 f o r e a c h 等。 ⋅ 常见的函数 w i l d c a r d 函数其语法为 为规则中第一个prerequisites名称 3、内置命令 · Makefile中内置了一些常用的命令有字符串处理函数subst、patsubst、strip、findstring、filter、filter-out、sort、word、wordlist、words、firstword、lastword文件名处理函数dir、notdir、suffix、basename、addsuffix、addprefix、join、wildcard、realpath、abspath条件处理函数if循环处理函数foreach等。 ·常见的函数 wildcard 函数其语法为 为规则中第一个prerequisites名称3、内置命令⋅Makefile中内置了一些常用的命令有字符串处理函数subst、patsubst、strip、findstring、filter、filter−out、sort、word、wordlist、words、firstword、lastword文件名处理函数dir、notdir、suffix、basename、addsuffix、addprefix、join、wildcard、realpath、abspath条件处理函数if循环处理函数foreach等。⋅常见的函数wildcard函数其语法为(wildcard pattern)pattern为匹配的模式比如 ( w i l d c a r d f o r e a c h 函数其语法为 (wildcard %.c) 为查找当前路径下面文件名以.c结尾的文件。 foreach 函数其语法为 (wildcardforeach函数其语法为(foreach var,list,text)每循环一次var从list中按顺序取值一个然后执行一次text代码并记录结果最终返回所用text代码运行的结果。 dirs : C_DIR S_DIR file : ( f o r e a c h d i r , (foreach dir, (foreachdir,(dirs),$(wildcard ( d i r ) / ∗ ) ) 将 C D I R 和 S D I R 文件夹下面的所有文件添加到 f i l e 变量中。 d i r 函数其语法为 (dir)/*)) 将C_DIR和S_DIR文件夹下面的所有文件添加到file变量中。 dir 函数其语法为 (dir)/∗))将CDIR和SDIR文件夹下面的所有文件添加到file变量中。dir函数其语法为(dir names…)用于获取names中文件夹路径比 ( d i r s r c / f o o . c h a c k s ) 将获得文件夹路径 s r c / . / n o t d i r 函数其语法为 (dir src/foo.c hacks) 将获得文件夹路径 src/ ./ notdir 函数其语法为 (dirsrc/foo.chacks)将获得文件夹路径src/./notdir函数其语法为(notdir names…)用于获取names中除去路径的信息 ( n o t d i r s r c / f o o . c h a c k s ) 将获得文件信息 f o o . c h a c k s b a s e n a m e 函数其语法为 (notdir src/foo.c hacks) 将获得文件信息 foo.c hacks basename 函数其语法为 (notdirsrc/foo.chacks)将获得文件信息foo.chacks basename函数其语法为(basename names…)用于获取names中除去后缀信息 ( b a s e n a m e s r c / f o o . c s r c − 1.0 / b a r h a c k s ) 将获得信息 s r c / f o o s r c − 1.0 / b a r h a c k s a d d s u f f i x 函数其语法为 (basename src/foo.c src-1.0/bar hacks) 将获得信息 src/foo src-1.0/bar hacks addsuffix 函数其语法为 (basenamesrc/foo.csrc−1.0/barhacks)将获得信息src/foosrc−1.0/barhacksaddsuffix函数其语法为(addsuffix suffix,names…)用于往names中添加后缀信息suffix ( a d d s u f f i x . c , f o o b a r ) 将获得文件信息 f o o . c b a r . c a d d p r e f i x 函数其语法为 (addsuffix .c,foo bar) 将获得文件信息 foo.c bar.c addprefix 函数其语法为 (addsuffix.c,foobar)将获得文件信息foo.cbar.caddprefix函数其语法为(addprefix prefix,names…)用于往names中添加前缀信息prefix ( a d d p r e f i x s r c / , f o o b a r ) 将获得信息 s r c / f o o s r c / b a r p a t s u b s t 函数其语法为 (addprefix src/,foo bar) 将获得信息src/foo src/bar patsubst 函数其语法为 (addprefixsrc/,foobar)将获得信息src/foosrc/bar patsubst函数其语法为(patsubst pattern,replacement,text)根据 pattern信息将text替换成replacement objects foo.o bar.o baz.o files ( p a t s u b s t (patsubst %.o,%.c, (patsubst( objects)) 将获得信息 foo.c bar.c baz.c 其可以简单写成 objects foo.o bar.o baz.o files $(objects:.o.c) 4、规则定义 ·规则是makefile中最重要的概念其告诉make 目标文件的依赖关系以及如何生成及更新这些目标文件。在makefile文件规则有2种一种是显式规则另一种是隐式规则。 ·显式规则用于说明 何时及如何重新生成目标其列出了目标依赖的文件信息并通过调用命令来创建或更新目标其语法一般为 targets : prerequisites recipe … targets为要生成或更新的目标prerequisites为目标依赖的关系recipe为生成目标的命令一个规则可以有多条recipe foo.o : foo.c defs.h cc -c -g foo.c 其中foo.o为targetfoo.c defs.h 为prerequisitescc -c -g foo.c为recipe。 ·隐式规则用于说明 何时及如何根据其名称来重新生成一类目标文件其描述了目标是如何依赖于名称相似的文件一般来说除去后缀信息其目标与依赖文件的名称是一样的并调用命令来创建或更新目标 %.o : %.c $(CC) -c $(CFLAGS) $ -o 这个隐式规则说明了 . o 的目标文件依赖于同名的 . c 文件其中 这个隐式规则说明了.o的目标文件依赖于同名的.c文件其中 这个隐式规则说明了.o的目标文件依赖于同名的.c文件其中 及 为自动变量 为自动变量 为自动变量为第一个prerequisites条件也就是 目标名称.c$为目标也就是 目标名称.o。 $(CC) -c $(CFLAGS) %.c -o %.o ·在makefile中我们通常要编写3种隐式规则第1种为代码链接规则第2种为源代码编译规则第3种为汇编代码编译规则。 5、文件搜索路径设置 ·Make命令默认会在当前路径中搜索prerequisites中的文件比如头文件但我们在写程序时经常将头文件和源文件隔开放在不同的文件夹下这种该怎么处理呢1、我们可以通过VPATH变量来解决2、我们可以通过vpath指令来解决。 ·VPATH变量VPATH变量为所有的prerequisites指定文件路径路径之间可以通过 : 或 空格 隔开 VPATH src:…/headers 其代表在src文件或者上层的headers文件中查找。 ·vpath指令vpath指令的作用与变量VPATH的作用差不多但vpath有更多的灵活性其语法为vpath pattern directories pattern为需要查找的文件匹配模式信息directories为要查找的文件路径 vpath %.h …/headers 其代表在上一层文件夹headers中查找 .h头文件信息。 6、依赖关系生成 在编写c文件代码时我们经常通过#include 语句来包含其它文件信息比如头文件该c文件被编译时需要依赖于其#include包含进来的文件在规则编写中就需要指出这个依赖关系这样当头文件信息改变后make程序就知道如何更新目标文件了而不是整个进行重编译但这个操作可以看出是非常消耗时间及傻瓜式的作为解决方案我们可以通过使用 编译器命令 –M选项来自动完成该工作比如在main.c中#include “defs.h”通过 cc –M main.c将产生输出 main.o:main.c defs.h我们可以将输出结果写到 .d文件中然后通过include指令包含到makefile文件中。 7、编译器常用命令选项 编译器通常进行预处理、编译、汇编和链接处理预处理包含了宏定义、文件包含、条件编译编译则直接将代码翻译成机器码汇编则将汇编代码翻译成机器码链接则按照内存地址分配文件将各个文件的机器码统一形成一个可执行文件对编译命令比如gcc而言该如何区别这些操作呢即通过命令选项。下面将介绍一些常见的命令选项 -o file 输出生成的 file文件 -c 编译或汇编程序文件但不会执行链接操作 -mcpuname 规定目标处理器的型号 -Wall 使能所有警告调试信息输出 -glevel 要求带调试信息的等级-g0代表不产生调试信息-g1代表产生最小的调试信息用来跟踪程序的运行但不包括本地变量-g3包含了一些额外的调试信息比如程序的宏定义等。 -I dir 增加头文件的搜索路径比如 –I…/header -D name 预先定义一个宏定义