Linux下Makefile简单教程要点

合集下载

linux makefile流程

linux makefile流程

linux makefile流程
在Linux系统中,Makefile是一种用于管理和自动化构建过程的工具。

它定义了
编译、链接和其他操作的规则,以及这些操作所依赖的文件和目标。

下面是Makefile的基本流程:
1. 确定目标:Makefile中首先需要指定要构建的目标,这些目标可以是执行文件、库文件或其他想要生成的输出。

2. 定义变量:在Makefile中,变量用于存储要使用的命令、编译器选项、源文件
列表等信息。

通过定义变量,可以简化Makefile的维护和修改。

3. 定义规则:规则描述了如何生成目标文件的过程。

每条规则包括目标、依赖和
命令。

目标是要生成的文件或动作,依赖是生成目标所需的文件或动作,命令是
执行操作的命令。

4. 构建依赖关系:Makefile使用依赖关系来确定何时重新构建目标。

依赖关系指
定了目标所依赖的文件或其他目标。

5. 执行命令:当执行make命令时,Makefile会检查目标及其依赖关系,并根据
需要执行相关命令。

Makefile会自动判断哪些文件需要重新构建,以及构建的顺序。

6. 更新目标:如果目标不存在或其依赖发生了变化,Makefile会根据规则中定义
的命令重新生成目标。

7. 清理目标:可以在Makefile中添加一个"clean"规则来删除生成的目标文件和其
他中间文件,以便重新构建项目。

8. 终止构建:在构建过程中,如果发生错误或出现其他异常情况,可以通过抛出
错误或使用特定命令来停止构建过程。

嵌入式linux自动生成makefile步骤

嵌入式linux自动生成makefile步骤

嵌入式linux自动生成makefile步骤在嵌入式 Linux 开发中,Makefile 是一种非常常用的构建工具,用于自动化编译、链接和生成目标文件。

Makefile 可以根据文件的依赖关系判断哪些文件需要重新编译,从而提高编译的效率。

下面是嵌入式Linux 自动生成 Makefile 的步骤:1. 确定项目结构:首先,需要确定嵌入式 Linux 项目的目录结构,包括源代码文件、头文件、库文件等。

通常情况下,源代码文件位于`src`目录下,头文件位于`include`目录下,库文件位于`lib`目录下。

2. 编写 Makefile 模板:根据项目结构,编写一个基本的 Makefile 模板。

Makefile 是以行为单位的文本文件,其基本格式为:`target: dependencies`,接着是一行或多行的命令。

一个最简单的 Makefile 示例如下:```CC := gccCFLAGS := -Iincludetarget: main.o foo.o$(CC) $(CFLAGS) -o target main.o foo.omain.o: src/main.c include/foo.h$(CC) $(CFLAGS) -c src/main.cfoo.o: src/foo.c include/foo.h$(CC) $(CFLAGS) -c src/foo.cclean:rm -f target *.o```3. 定义变量:继续完善 Makefile,定义一些变量,以便于管理和修改。

例如,可以定义`CC`变量为编译器的路径及名称,`CFLAGS`变量为编译时需要的参数,如编译器路径、头文件路径等。

通过定义这些变量,可以方便地修改编译器及编译选项。

```CC := arm-linux-gccCFLAGS := -Iinclude -Llib```4. 自动推导规则:Makefile 可以根据文件的拓展名自动识别文件类型,并调用相应的编译器进行编译。

嵌入式 linux 自动生成 makefile 步骤

嵌入式 linux 自动生成 makefile 步骤

嵌入式linux 自动生成makefile 步骤嵌入式Linux 自动生成Makefile 的步骤通常涉及以下几个关键步骤:1. 配置项目结构:首先,你需要定义你的项目结构。

这通常包括源代码文件、头文件、库文件等。

2. 选择构建系统:有很多构建系统可以用于嵌入式Linux,例如Makefile、CMake、Bazel 等。

在这个例子中,我们将使用Makefile,因为它在嵌入式Linux 社区中非常流行。

3. 编写Makefile:Makefile 定义了如何编译和链接你的项目。

一个基本的Makefile 通常包括以下内容:'CC':C 编译器'CFLAGS':编译器标志'LDFLAGS':链接器标志'SOURCES':源文件列表'OBJECTS':编译后的目标文件列表'TARGET':可执行文件或库的名称4. 构建目标:你可以为不同的目标(例如,用于开发板的二进制文件或用于在宿主机上运行的测试二进制文件)定义不同的构建目标。

例如:'''makefileall: my_programmy_program: main.o util.o$(CC) $(LDFLAGS) main.o util.o -o my_programmain.o: main.c$(CC) $(CFLAGS) -c main.cutil.o: util.c$(CC) $(CFLAGS) -c util.c'''5. 自动工具:有许多工具可以帮助你自动生成Makefile,例如Kconfig、autoconf、automake 等。

这些工具可以帮助你生成配置脚本和Makefile,以适应不同的系统和编译器。

6. 编译和部署:一旦你有了Makefile,你就可以使用'make' 命令来编译你的项目。

linux vscode makefile语法

linux vscode makefile语法

linux vscode makefile语法在Linux 系统中,如果您想使用VSCode 编写Makefile 相关的项目,可以参考以下步骤进行安装和配置:1. 首先,确保已经正确安装了Visual Studio Code。

如果尚未安装,可以参考[1] 中的教程进行安装。

2. 安装Makefile 插件。

打开VSCode,转到“扩展”选项卡(快捷键:Ctrl+Shift+X),搜索“Makefile”,找到名为“Makefile Support”的插件,点击“安装”。

3. 创建一个新的Makefile 项目。

在VSCode 中,创建一个新的文件夹,然后在该文件夹中打开终端(快捷键:Ctrl+`)。

4. 编写Makefile 语法。

在项目根目录下创建一个名为“Makefile”的文件,然后编写相应的Makefile 语法。

以下是一个简单的示例:```make# 设置变量MY_PROJECT_NAME = MyProjectMY_PROJECT_VERSION = 1.0# 设置目标all: build# 构建目标build:echo "Building $MY_PROJECT_NAME $MY_PROJECT_VERSION"# 在这里添加您的构建命令,例如:cmake、make等# 清理目标clean:echo "Cleaning $MY_PROJECT_NAME"# 在这里添加您的清理命令,例如:rm -rf build/# 默认执行构建目标default: build```5. 保存Makefile 文件并按F5 键运行项目。

VSCode 将会自动使用内置的终端执行Makefile 中的命令。

6. 如果需要使用GPU 加速构建,可以在Makefile 中添加相应的NVIDIA CUDA 或者AMD OpenCL 命令。

例如,如果您使用的是NVIDIA GPU,可以添加以下命令:```makebuild_gpu:echo "Building $MY_PROJECT_NAME $MY_PROJECT_VERSION using GPU"# 在这里添加您的GPU 构建命令,例如:nvcc、cuda编译器等```7. 按照项目需求修改Makefile 中的命令和目标。

linux makefile 写法

linux makefile 写法

linux makefile 写法Linux Makefile 写法Makefile 是一种用于组织和管理软件项目的文件格式,它指导着编译器如何构建程序。

在Linux 环境下,Makefile 是一种特别常见的构建工具,它通过定义目标和规则,使得软件开发人员能够轻松地构建、编译和部署项目。

本文将一步一步回答关于Linux Makefile 写法的问题,帮助你深入了解如何编写高效的Makefile。

第一步:创建Makefile 文件首先,你需要在你的Linux 环境中创建一个名为"Makefile" 的文本文件。

你可以使用任何文本编辑器,如Vim、Nano 或者Emacs 来完成这个任务。

确保你的Makefile 文件保存在项目的根目录下,这样Make 命令才能找到它。

第二步:定义变量在Makefile 中,你可以定义各种变量来存储重复使用的值,如编译器名称、编译选项和目标文件名。

定义变量的语法是"变量名=值",例如:CC=gccCFLAGS=-Wall -WerrorTARGET=myprogram在上面的例子中,我们定义了三个变量:`CC`、`CFLAGS` 和`TARGET`。

`CC` 变量的值是`gcc`,指定了使用GCC 编译器。

`CFLAGS` 变量的值是`-Wall -Werror`,这些编译选项用于启用所有警告,并将警告视为错误。

`TARGET` 变量的值是`myprogram`,这是我们期望生成的最终可执行文件的名称。

第三步:指定编译规则在Makefile 中,你需要指定编译规则来告诉编译器如何构建你的程序。

编译规则由目标、依赖和命令组成。

下面是一个简单的例子:(TARGET): main.o utils.o(CC) (CFLAGS) -o (TARGET) main.o utils.o在上面的例子中,我们指定了一个名为`(TARGET)` 的目标,它依赖于`main.o` 和`utils.o` 两个文件。

嵌入式 linux 自动生成 makefile 步骤

嵌入式 linux 自动生成 makefile 步骤

嵌入式 linux 自动生成 makefile 步骤嵌入式Linux自动生成Makefile是在嵌入式Linux开发中非常常见且重要的环节。

Makefile是一个文本文件,用于描述一系列源文件如何编译和链接成可执行文件。

为了方便管理、编译和维护大型项目,可以使用脚本或工具自动生成Makefile文件。

以下是嵌入式Linux自动生成Makefile文件的步骤,总结如下:1.确定项目的目录结构:在开始编写Makefile之前,需要清楚项目的目录结构,包括源代码、头文件、库文件和生成的可执行文件等。

这是自动生成Makefile的前提。

2.编写脚本或选择工具:为了自动生成Makefile文件,可以使用脚本语言(如Python、Perl或Shell脚本)编写相应的脚本,也可以使用专门的工具(如Automake或CMake)进行生成。

3.收集源文件信息:在生成Makefile的过程中,需要收集源文件的信息,包括源代码文件、头文件和库文件等。

这可以通过递归遍历项目目录,查找相应的文件来完成。

4.定义编译规则:根据项目的需求,定义适当的编译规则。

包括编译命令、编译选项和依赖关系等。

通常,每个源文件都应该有独立的编译规则。

5.设置变量和路径:为了方便管理和灵活配置,可以设置一些变量和路径,用于指定编译器、编译选项、链接选项以及头文件和库文件的路径等。

6.自动生成目标文件和可执行文件:根据之前收集的源文件信息和定义的编译规则,自动生成目标文件和最终的可执行文件。

这可以通过在Makefile中使用变量和规则来实现。

7.添加清理和其他规则:除了编译和链接规则外,还可以添加一些其他的规则,如清理规则(用于删除生成的文件)、测试规则(用于运行测试构建或测试案例)等。

8.编写安装规则:如果项目需要安装到目标设备或系统中,可以编写相应的安装规则。

这可以包括将可执行文件、库文件、配置文件等复制到指定的目录中。

9.优化编译过程:在编写生成Makefile的过程中,可以对编译过程进行一些优化,如使用静态模式来减少重复代码,使用变量来简化配置等。

linux makefile语法

linux makefile语法

linux makefile语法Makefile 是一种用于构建和管理项目的文件,特别适用于C/C++等编程语言。

下面是 Makefile 的一些常见语法:1. 变量定义:变量可以通过 `变量名 = 值` 的形式定义。

例如:`CC = gcc`。

在后续的规则中,可以通过`$(变量名)` 的形式引用变量的值。

2. 目标规则:目标规则指定了 Makefile 中的一个目标以及其依赖关系和命令。

一般的语法为:```目标: 依赖[tab]命令```其中,目标是一个文件或一个动作的名字,依赖是目标所依赖的其他文件或目标,命令是执行的操作。

命令必须以一个TAB 字符开始。

3. 通配符:在 Makefile 中,可以使用通配符来表示一组文件。

例如,`*.c` 表示所有以 `.c` 结尾的文件。

4. 伪目标:伪目标是一种特殊的目标,它不代表一个文件,而是代表一组操作。

伪目标一般用于执行一些特殊的操作,如清理文件、生成文档等。

在 Makefile 中,可以通过 `.PHONY` 关键字来定义伪目标:```.PHONY: cleanclean:[tab]rm -f *.o```5. 函数:Makefile 中也支持函数的使用。

常见的函数有:- `$(shell command)`:执行 command 命令,并返回输出结果。

- `$(wildcard pattern)`:返回符合 pattern 模式的文件列表。

- `$(patsubst pattern,replacement,text)`:将 text 中符合 pattern 模式的部分替换为 replacement。

- `$(foreach variable,list,text)`:对 list 中的每个元素,在 text 中进行替换操作。

这些只是 Makefile 的一部分语法,具体使用还需要根据具体情况和需求来灵活应用。

Linux系统makefile基础教程

Linux系统makefile基础教程

∙Makefile可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。

∙∙其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等。

∙∙编译整个工程需要涉及到的,在Makefile中都可以进行描述。

换句话说,Makefile可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。

∙1.makefile的命名(两种)makefile2.Makefile2.makefile的规则规则的三个要素:目标、依赖、命令3.多文件的makefile的编写(一个源文件只重新编译改变的文件)1.makefile可以有多个规则,当第一个规则的的命令在执行的时候发现没有相应的依赖,就在下面的规则中找。

最上面的规则的目标是终极目标一定写在最上面,也就是最后要生成的文件。

多文件Makefile的更新原理(基于时间)4.makefile中的变量1.自定义变量obj=main.o add.o sub.o引用的时候直接使用$(obj)2.自动变量()规则中的第一个依赖@:规则中的目标$^:规则中所有的依赖3.模式自动匹配%子规则中:makefile维护的变量(通常大写,自己可以修改)CC:cc(即gcc)APPFLAGS:预处理使用的选项CFLAGS:编译的时候使用的选项LDFLAGS:链接库使用的选项5.makefile中的函数(都是有返回值)1.wildcard查找当前目录下所有.c文件,返回值给srcsrc=$(wildcard./*.c)2.patsubst替换所有.c文件为.o文件obj=(src))6.make clean在makefile最后加入clean的目标,为了重新编译所有文件得删除原来生成的文件7.最终的简单的makefile。

Linux makefile 教程 非常详细,且易懂

Linux makefile 教程 非常详细,且易懂

最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到ma kefile就越看越迷糊,可能是我的理解能不行。

于是google到了以下这篇文章。

通俗易懂。

然后把它贴出来,方便学习。

后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比较好理解。

能让人看懂就是好文章。

跟我一起写 Makefile陈皓 (CSDN)概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows 的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefil e还是要懂。

这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。

特别在Unix下的软件编译,你就不能不自己写mak efile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

因为,makefile关系到了整个工程的编译规则。

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释ma kefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的ma ke,Visual C++的nmake,Linux下GNU的make。

可见,makefile都成为了一种在工程方面的编译方法。

现在讲述如何写makefile的文章比较少,这是我想写这篇文章的原因。

makefile基本使用方法

makefile基本使用方法

makefile基本使用方法makefile是一种用来管理和自动化构建程序的工具。

它可以根据源代码文件的依赖关系和编译规则来自动构建目标文件和可执行文件。

makefile的基本使用方法如下:1. 创建makefile文件:在项目的根目录下创建一个名为makefile 的文件。

2. 定义变量:在makefile中,可以使用变量来存储一些常用的参数和路径,以便于后续的使用。

例如,可以定义一个名为CC的变量来指定编译器的名称,如:CC=gcc。

3. 编写规则:在makefile中,可以使用规则来指定如何编译源代码文件和生成目标文件。

一个规则由两部分组成:目标和依赖。

目标是要生成的文件,依赖是生成目标文件所需要的源代码文件。

例如,可以编写以下规则:```target: dependency1 dependency2command1command2```其中,target是目标文件,dependency1和dependency2是依赖的源代码文件,command1和command2是生成目标文件所需要执行的命令。

4. 编写默认规则:在makefile中,可以使用一个默认规则来指定如何生成最终的可执行文件。

默认规则的目标通常是可执行文件,依赖是所有的源代码文件。

例如,可以编写以下默认规则:```all: target1 target2```其中,target1和target2是生成的目标文件。

5. 编写clean规则:在makefile中,可以使用clean规则来清理生成的目标文件和可执行文件。

例如,可以编写以下clean规则: ```clean:rm -f target1 target2```其中,target1和target2是要清理的目标文件。

6. 运行make命令:在命令行中,使用make命令来执行makefile 文件。

make命令会自动根据规则和依赖关系来编译源代码文件和生成目标文件。

例如,可以运行以下命令:``````make命令会根据makefile文件中的规则和依赖关系来编译源代码文件并生成目标文件和可执行文件。

linux下makefile文件中比较大小的语法

linux下makefile文件中比较大小的语法

linux下makefile文件中比较大小的语法在Linux下,Makefile是一种常用的构建工具,用于自动化编译和构建软件项目。

在Makefile中,我们经常需要比较文件的大小来判断是否需要重新编译或执行某些操作。

本文将介绍在Linux下Makefile 文件中比较大小的语法。

在Makefile中,我们可以使用shell命令来执行系统命令。

比较文件大小的常用命令是`stat`和`du`。

`stat`命令用于获取文件的详细信息,包括文件大小,而`du`命令用于计算文件或目录的大小。

首先,我们可以使用`stat`命令获取文件的大小,并将结果保存到一个变量中。

下面是一个示例:```file_size := $(shell stat -c %s file.txt)```上述命令将获取文件`file.txt`的大小,并将结果保存到变量`file_size`中。

`-c %s`选项用于指定输出文件大小的格式。

接下来,我们可以使用条件语句来比较文件大小。

常用的条件语句有`ifeq`和`ifneq`。

下面是一个示例:```ifeq ($(file_size), 0)@echo "文件为空"else@echo "文件大小为$(file_size)字节"endif```上述代码将判断文件大小是否为0,如果是,则输出"文件为空",否则输出"文件大小为$(file_size)字节"。

`@echo`命令用于输出信息,`$(file_size)`表示变量的值。

除了使用`stat`命令获取文件大小外,我们还可以使用`du`命令计算文件或目录的大小。

下面是一个示例:```file_size := $(shell du -b file.txt | cut -f1)```上述命令将使用`du`命令计算文件`file.txt`的大小,并使用`cut`命令提取文件大小。

Linux_makefile_教程_非常详细,且易懂

Linux_makefile_教程_非常详细,且易懂

/LQX[BPDNHILOHB B )ŝ ܄ W[W- qƲ/LQX[ &" Ƽ- /LQX[஧9 &" \ )̤PDNHILOHҵƳ Ƴ-ʼn $ $ǎ JRRJOH̤- -Ŀ - ܄ Ď ¹҅ე ɑqƲၘ ҈ ந-Ŀ < /LQX[஧9 &" \ PDNHILOH ܖၚ- ©0 Ǿ -Ŀ Ҕ7 ˣ . ᇍ3 $ơ0 ܄ҵ 3+ ƲL 0DNHILOH&6'1-üüǮ) PDNHILOH Ƣ :LQRGZV ַ . ሓ- (ቅ.:LQGRZV ,'(.(Ȗ>-- Ȓ 3 Ȓ 3 <SURIHVVLRQDO ַ PDNHILOH- ܄ -ҵ3 ந -) +70/ "ᇕ 38 Ȗ ( 0 Ȗ- - +70/ ƣ ) Ĝ 8QL[ ᆿ ") Ȗҵ $ % LPDNHILOH- L PDNHILOH 9 ) - 0 J ҈ $V( PDNHILOH˫ ̤- ") Ƒ ঠ ၏ J ń ͩ$ &֦ ׹Ƒ PDNHILOHt)- t . G") . ") . / ") %ǎ- ͩ$ Ȓ (PDNHILOHҵ 6KHOO$ JƑƱ · Ȓ " 3 PDNHILOH 3 ҵ üüd%W ")e L3 PDNH3 ҈I%W") 2 -ᆿ ħ PDNH 3 J ǟPDNHILOHƑ 3 J ໘ ) ,'(. - 3 8 'HOSKL PDNH 9LVXDO & QPDNH /LQX[ *18 PDNH PDNHILOH. (- ")ந ၚ-8ȑLPDNHILOH ᇍ - L-Ŀ ύ ׷Ď / PDNH Ʊ ) 3J *. d Ȼư e > -/ dz *18 PDNH- ၚ- ஧9 5HG+DW /LQX[ PDNH ę ؿ - PDNH ּ (֭ Ʊ # J- ሩ ǎ,((( O 326,;-Ŀ Ƒ & & ঠ Ȓ( ܖ ؿĎëc .˫ǎ& & ") ƣ ˫ǎ- ˷v -) ȉ ˫ ") -/ܖ6ၒ ") 81,; *&&<&&˫ǎ ַ ")< ޻üüüüüüüüüü࡚ )˫ǎ ַ") . &< ໘ ) Ƣ & & - SDV G ¹ঠ ") Ƒ :LQGRZV Ʊҵ R EM 81,; R γ2EM H F W )LOH - WȒ >") F RPSLOH Ď ˹¹ / 2EM H F W )LOH · - WȒ Ȓ ޻ OLQN") ") ) ࡙ / ࡙ ǎ # - Ȗ ƣ") ܖ ȉූ Ƒּ) #t)ּ) & & Ƒ ܖ ) ࡙ ") ҵ ") Ƒ ໘ ) ঠ .ּ) ּǎ Ƒ 2 2%-޻ ( ޻ <IҾ / ܖ ȩ -.Ƒ 2 2%- ޻ ּ ַ ޻ ౧ ܖ ঠ ౧ Ƒ 2EM H F W )LOH ǎঠ ") Ƒ # ޻ Ƒ - ǎ") ɑ ܖ "Ƒ ܣ :LQGRZV - dֻ e /L E UDU\)LOH Ʊҵ OL E 81,; $U F KL Y H)LOH Ʊҵ D" ঠ G Ƒ ˹ Ƒ · ") ") ç ַ) < / 8 ") " Ɲ 3 2EM H F W )LOH # ޻ ַ ޻ ܖ 2EM H F W )LOHƑܼ Ҕந 8 ܼ ̤ ቅ̤ҵ ݗ ޻ ) /LQNHU (UURU 9& - ) ໘ /LQN ) ) ) ޻ $ܼ̤ Ҕந Ȗ t 2EM H F W )LOH3 ׶࡙ *18 PDNH Ƣ ˷v - ơ0DNHILOH 1"üüüüüüüPDNH3 · 0DNHILOH ƣPDNH3 ) b")< ޻ ַG 7 ) 0DNHILOH +L ɑ" v ˬၒƣ - 7 ঠǎ*18 PDNHȩ µ˸ - 7Ƒ & < L 0DNHILOH ƣPDNH3 8ȑ")< ޻-/LQX[BPDNHILOHB B )ŝ ܄ W[W8 - ࣣ ")Nj ቅ) ܖ & . ") ޻8 - & ቅ) ") & ޻ ַ8 - - ቅ) ") -- & ޻ ַ0DNHILOHL 3 ܖ - PDNH3 ҵ ҈ PDNH3 %W $ ޖ׷̵ ڣ̕ t . /") #% ")ܖ < ޻ ַ0DNHILOHၚ-- 0DNHILOH)̵ - ơ G ņ 0DNHILOHWDUJHW SUHUH T XLVLWHVF RPPDQGWDUJHWƱҵ 2EM H F W )LOH Ʊ · - ౐ /D E HO ǎ ౐- Ĝ " d e ༐Ƒ -SUHUH T XLVLWHVҵ ቅ WDUJHWܖF RPPDQGƱҵ PDNH · 3 6KHOO3- Ȼư˫ Ʊҵ ) WDUJHW- ȻưǎSUHUH T XLVLWHVƑ J t) F RPPDQGƑ ) Čҵ ) SUHUH T XLVLWHVƑ8 WDUJHW ) F RPPDQGܖt) 3 ҵ · -ҵ 0DNHILOH Ʊҵ 0DNHILOHƑ ؽ ˷v)ֽ̤ 0DNHILOH ҵ - Č 3 -Ŀ Ʊ)" - 11 - һĎ - 0DNHILOH (ඥ<ؽ 3 L3 0DNHILOH- Č Č " Ȓ"Ꮔ"Ȗۈۈ̤ ˷v- $nj 7࡙8̵ ܖ) 8 < & (-҈ ̵ ܖ- ቅ 0DNHILOHּ) - ѤHGLW PDLQ R N E G R F RPPDQG R GLVSOD\ R ?LQVHUW R VHDU F K R ILOHV R XWLOV RFF R HGLW PDLQ R N E G R F RPPDQG R GLVSOD\ R ?LQVHUW R VHDU F K R ILOHV R XWLOV RPDLQ R PDLQ F GHIV KFF F PDLQ FN E G R N E G F GHIV K F RPPDQG KFF F N E G FF RPPDQG R F RPPDQG F GHIV K F RPPDQG KFF F F RPPDQG FGLVSOD\ R GLVSOD\ F GHIV K E XIIHU KFF F GLVSOD\ FLQVHUW R LQVHUW F GHIV K E XIIHU KFF F LQVHUW FVHDU F K R VHDU F K F GHIV K E XIIHU KFF F VHDU F K FILOHV R ILOHV F GHIV K E XIIHU K F RPPDQG KFF F ILOHV FXWLOV R XWLOV F GHIV KFF F XWLOV FF OHDQUP HGLW PDLQ R N E G R F RPPDQG R GLVSOD\ R ?LQVHUW R VHDU F K R ILOHV R XWLOV R? ސ - ᇍɑǎ0DNHILOH ) ¹- ˷v p (d0DNHILOHe d PDNHILOHe Ƒ Ď ) ׹ ޻ᇗˣ3 dPDNHeҵ · HGLW 8 · <ܖ Ƒ ቅ) ౒Ρ · dPDNH F OHDQeҵ -- PDNHILOHƑ WDUJHW · HGLW<Ƒ R Ȼư SUHUH T XLVLWHV ҵ ˾ ቅ. F < K R . ඪȻư #-. R c · HGLW Ȼư Ȼư˫ Ҕ* ҵ ) - . ސ ) .t)3Ȼư˫ " ቅ t)-8ȑ Ȓ "3 t 7D E Ȓ( ၘȋ PDNH ౧3 ) Ȓ ౧· ܖt) 3 PDNH ᇍWDUJHWV <SUHUH T XLVLWHV 8 SUHUH T XLVLWHV WDUJHWV #WDUJHW p ) ቅ) PDNHҵ · "t) 3/LQX[BPDNHILOHB B )ŝ ܄ W[W-/ ) Č F OHDQ ҅ Nj WȒ p Č &) Ƒ OD E OH J˾ Ǯ)Ʊࣣ ቅ) PDNHҵ %W bܼ Ȼư Ʊҵ %W· J ܖt) 3 · J 3 ҵ PDNH 3 - OD E OH p - PDNHILOHƑt) ") <") ˫ 3 8 ַ ܣ ַ ķķPDNH 8ȑ Ȓ6ၒ Ʊҵ ᇗˣPDNH3 ቅ)PDNH ׷̵ ׹ ܼ p d0DNHILOHe dPDNHILOHe8 ܼ̤ ҅ ܼ Ƒ జ WDUJHW 7ѤƑ ܼ̤dHGLWe- ¹- Ȓ( ŝ8 HGLW p HGLWܖȻư R HGLW- ቅ) ҵ · ܖt) 3 HGLW-8 HGLWܖȻư R Ʊ p ቅ)PDNH ׷̵ Ƒܼ ( R Ȼư 8 ܼ̤ ˹ ޖቅ R - Č Nj׷Ď Ȗ & <+ p ǎ PDNH R Ď ˹ R 3PDNH ŝ ͫ Ʊҵ · HGLW--ҵ PDNH Ȼư PDNH Ӏc Ӏ bܼ Ȼư˫ ̤ ŝ") జ ܼ Nj Ƒ 8 ந ) 8 Ȼư ܼ ̤ ቅ)PDNHҵ ޻- ݗ # ǎܖt) 3 ) ") ͩ PDNH PDNH ౧ Ȼư γ 8 ܼ-Ȼư˫ ) ˾ - ቅ) Ʋ ҵ Ȓ-Nj - ሓ F OHDQ- ࣣ జ ޻ ޻˫ฬ ቅ)҅ ܖt) 3 % W· Nj PDNH· γ3 üüdPDNH F OHDQe ࡚ ܖ ɑ/")ǎ " Ƒ 8 - ")Nj- ׷ -JƑ ঠ 8ILOH F ቅ) ޖ ȻưILOH R /") Ʊҵ - Ȼ ˫ ܖt) 3 ǎ ILOH R Ʊ ǎ ILOH R HGLW ܖ HGLWƱ / ޻- ) HGLW t) 3#8 -d F RPPDQG Ke ቅ) NG E R F RPPDQG R<ILOHV R. /") HGLW / ޻PDNHILOHƑȩ /7ѤƑ Gơ HGLWHGLW PDLQ R N E G R F RPPDQG R GLVSOD\ R ?LQVHUW R VHDU F K R ILOHV R XWLOV RFF R HGLW PDLQ R N E G R F RPPDQG R GLVSOD\ R ?LQVHUW R VHDU F K R ILOHV R XWLOV R̤> R@ p Ɩ / - 8 ͪˣ > R@ ቅ) ͪ ּ) - F OHDQƑ ׷Ď PDNHILOH ܖ ͪƱ ೧ 38 PDNHILOH ቅ) ҵ $ à ͪˣ # %") * ܖ (-PDNHILOH "ݖ PDNHILOHƑ ȩ / PDNHILOH /Ʊҵ p Ɩ &) Ƒ ҋ $ 38 / R EM H F WV 2%-(&76 R EM V 2%-6 R EM 2%- ࡙ ౧Ǯ) $ R EM ҵ - PDNHILOH ҵ- t)R EM H F WV PDLQ R N E G R F RPPDQG R GLVSOD\ R ?LQVHUW R VHDU F K R ILOHV R XWLOV Rǎ ҵ ɑ PDNHILOHƑ d R EM H F WV e ȩ - /- ǎ ༃ęPDNHILOHҵ - ѤR EM H F WV PDLQ R N E G R F RPPDQG R GLVSOD\ R ?LQVHUW R VHDU F K R ILOHV R XWLOV RHGLW R EM H F WVFF R HGLW R EM H F WVPDLQ R PDLQ F GHIV KFF F PDLQ FN E G R N E G F GHIV K F RPPDQG KFF F N E G FF RPPDQG R F RPPDQG F GHIV K F RPPDQG KFF F F RPPDQG FGLVSOD\ R GLVSOD\ F GHIV K E XIIHU KFF F GLVSOD\ FLQVHUW R LQVHUW F GHIV K E XIIHU KFF F LQVHUW F/LQX[BPDNHILOHB B )ŝ ܄ W[WVHDU F K R VHDU F K F GHIV K E XIIHU KFF F VHDU F K FILOHV R ILOHV F GHIV K E XIIHU K F RPPDQG KFF F ILOHV FXWLOV R XWLOV F GHIV KFF F XWLOV FF OHDQUP HGLW R EM H F WVǎ 8 R ͪˣ ౒Ρ R EM H F WV /ҵ -˫ǎ / ) ""Ȗ ሓǔ ơPDNH%WÅ*18 PDNH ҅ %WÅ c Ȼư˫ 3 ǎ ҵࣣؿ b > R@ .L ńǾ 3 ( PDNH %Wƣ % Å 3PDNH ̤ > R@ ҅ҵ %W ¹> F@ ͪ Ȼư˫ Ƒ 8 PDNHܼ̤ ZKDWH Y HU R ቅ) ZKDWH Y HU F ҵ ZKDWH Y HU R Ȼư F F F ZKDWH Y HU FƱ Å ǎ PDNHILOH˹Ʊ L -) PDNHILOH c ĉ-R EM H F WV PDLQ R N E G R F RPPDQG R GLVSOD\ R ?LQVHUW R VHDU F K R ILOHV R XWLOV RHGLW R EM H F WVFF R HGLW R EM H F WVPDLQ R GHIV KN E G R GHIV K F RPPDQG KF RPPDQG R GHIV K F RPPDQG KGLVSOD\ R GHIV K E XIIHU KLQVHUW R GHIV K E XIIHU KVHDU F K R GHIV K E XIIHU KILOHV R GHIV K E XIIHU K F RPPDQG KXWLOV R GHIV K3+21< F OHDQF OHDQUP HGLW R EM H F WV- Ʊҵ PDNH d e ˷vƑ d 3+21<e F OHDQ˫ǎ ()ŝ d e<d e ""Ȗ ሓ˥ ń PDNHILOHγĎ PDNH %WÅ 3 ቅ) ̤ቅ > R@<> K@ Ȼưҵ Č ૻ ቅ) / > K@ $ $¹J Ʋ 3 ࣣ - ǎPDNH ) v ) ҅ 8-%WÅ 3 < ͩ$$ PDNHILOHR EM H F WV PDLQ R N E G R F RPPDQG R GLVSOD\ R ?LQVHUW R VHDU F K R ILOHV R XWLOV RHGLW R EM H F WVFF R HGLW R EM H F WVR EM H F WV GHIV KN E G R F RPPDQG R ILOHV R F RPPDQG KGLVSOD\ R LQVHUW R VHDU F K R ILOHV R E XIIHU K3+21< F OHDQF OHDQUP HGLW R EM H F WV- ơ PDNHILOH ౒Ρ 3 Ȼư˫ ҵ Č ƽ- ᒂ<ēި ˮ - Ȗ F 3- F - Ȼư˫ nj 8 ͪˣ R ቅҵ -İ/LQX[BPDNHILOHB B )ŝ ܄ W[W0DNHILOHƑ.ּ)L İ R<· - dzɑǎ/") Ʊ ǎ - d J e 11 -ၘ " J ໘ .F OHDQUP HGLW R EM H F WV(ிɿ >3+21< F OHDQF OHDQUP HGLW R EM H F WV̵ )Nj 3+21< F OHDQ d e # UP3 ̵ ͪ- ҵ ƱƢ . ந 3 ౧ ""> - ׷Ď F OHDQ Ď -ҵ PDNH 6ၒ )Ʊ ڱ - üüd F OHDQ . eҵ PDNHILOH Ⴄ Ʊ PDNHILOH - PDNHILOH ˫ŝ༐ O 3- O 3-ҵ0DNHILOH -üüüüüüü0DNHILOH/ Ǯ)0DNHILOH/( -ǔ /t) < ǟ) - 8ȑ - 0DNHILOH +L# Ȼư 3ǎ PDNH %WÅ ͩ$ ܖ ơ ᇍņ ౒ +L0DNHILOH - PDNHܖ/ t) 0DNHILOHƑ t) / / ໘. p Ɩ - ČȖ&) Ƒ ҋ ׷0DNHILOH · JƑ /. ·Ӎ̤ ּ ȉූJ - . 0DNHILOHƑ 0DNHILOH ҵ &) Ƒ LQ F OXGH ޖ .ڣ̕ t0DNHILOHƑ . ҵ &) Ƒ ") LI - ҵ t) 3 ˫- . ˷v " . Ƒၚ-ǟ 0DNHILOHƑ ǟ <81,; 6KHOO$ J ǟ d e p - ҵ & & Ƒ d e 8 Ȗ Ȗ 0DNHILOHƑȩ d e p - ᆼ) 8 d? e-ɢ 0DNHILOHƑ 3 ؿ >7D E@nj 0DNHILOH6ၒ ڣ̕ PDNH3 ׷̵ ׹ ַܼ (d*18PDNHILOHe dPDNHILOHe d0DNHILOHe ܼ̤- ǟ- - Ƒ 3ȩ d0DNHILOHe- ( - జ p ( L - 3 d*18PDNHILOHe - *18 PDNHƣ .PDNH I L d PDNHILOHe 3 ) PDNH. dPDNHILOHe<d0DNHILOHe- 6ၒ׷Ď Ȗ ȩ +L0DNHILOH 8 d0DNH /LQX[e d0DNH 6RODULVe d0DNH $,;eķ 8 tĜt 0DNHILOH Ȗ ȩ PDNH d Ie<d ILOHeϤ 8 PDNH I 0DNH /LQX[ PDNH ILOH 0DNH $,;J҅ 0DNHILOH0DNHILOHȩ LQ F OXGH˫ p ¹ 0DNHILOH - - &) LQ F OXGH ύ ύ ׷̵ ȉූ LQ F OXGH )LQ F OXGH ILOHQDPH!ILOHQDPH ׷̵ Ȓ "6KHOO +ؖ<-ቱLQ F OXGH̵ .İp 3 " $ >7D E@ LQ F OXGH< ILOHQDPH! İ Ɯ 7Ѥ Ȗ - 0DNHILOH D PN E PN F PN - IRR PDNH c / E DU J -H PN< I PN ቅ) )LQ F OXGH IRR PDNH PN E DUķ ǎ/LQX[BPDNHILOHB B )ŝ ܄ W[WLQ F OXGH IRR PDNH D PN E PN F PN H PN I PNPDNH3 ¹ܼ LQ F OXGHܖ J҅0DNHILOH ¹J˷v sූ ׷̵ ȉූ ҵ3 & & LQ F OXGH 8 .ࣣ t" +ؖ +ؖ ) PDNH ׷̵ ׹ G ܼ 8 ׷̵ ׹ ࣣ ܼ̤ ቅ) PDNH- ׹ ܼ8 PDNH· d ,e d LQ F OXGH GLUeϤ ቅ)PDNHҵ - Ϥ ܖ t ׹ b ܼ8 ׹ SUHIL[! LQ F OXGH ໘ XVU OR F DO E LQ XVU LQ F OXGH p ) PDNHƱ bܼ8 ࣣ ܼ̤ ) PDNH Ɲ ٫ 3 Ꮀ ந%3 ) ҅ ""ᇇˣJ҅ ҈ PDNHILOH ) PDNH ˹/)-.ࣣ ܼ̤ $) 8 - PDNHܝ ந %3 ٫ 8 Ȗ ơPDNH ቅ. ) #""· Ȗ LQ F OXGH̵ͪ d e 8LQ F OXGH ILOHQDPH!J ƢLQ F OXGHNj Ƒ நǮ) ) . ݗ ""· <J҅ę PDNHˮv ˫3 VLQ F OXGH JȒ <-஧9 /0$.(),/(68 Ȗ ׷̵஧9Ƒt)-஧9 /0$.(),/(6 ቅ) PDNH ¹- /Ƒ ɢ> ńǾǎLQ F OXGH WȒ - /Ƒ ɢ J҅ 0DNHILOH İ ҅<LQ F OXGH - ஧9 Ƒ ˣ 0DNHILOH d e ƲȒ 8 ஧9 /Ƒt) ந ) PDNHƱ3 -/ - ၖ ȩ - ஧9 / ( - / t) ቅ)׷Ȗȩ PDNH ܖ 0DNHILOH. ̤҅ ؉ -" Ȗ ̤ -/ - - (- ƣ v ƱƢ Ȗ 0DNHILOH ந- - ቅ)Ȗ ׷̵஧9Ƒ ࣣ t)- /ǔ PDNH Ȓ*18 PDNH Ȓ · ࡛Ꮦˣ J҅ PDNHƱ ńǾ)ˣܖ 0DNHILOH)ˣ LQ F OXGH J҅0DNHILOHƑ /Å ܖ(ܖ Ȼư˫ޖȻư˫ ̓t . /· 3࡛(జ ࢍ (జnj ࢍ జ ࢍƑ 8 t) / ȩ - ቅ) PDNH ¹JӍ ȩ ȉූ 3PDNH ҈IᎰ Ӎ PDNHȩ 8 / ந Ȼư˫ Ƒ ቅ)dz׷- Ȼư ̓t ȩ - /ܝ J˷.Ӎ׷Ď - Ȓ Ȗ t 3 ሓ- ȖƱ PDNH (૕¥ -- ". Ʊҵv ܄-+Lüüüü. Ȼư˫0DNHILOHƑ ַ / ( 0DNHILOHƑ ּ) ŝ J҅ . - ܖ- ܖ t ơPDNH ሓȖ ŝ Ǯ) ໘ ) t) 0DNHILOHƑ $ 3 జ Ƒ ĵ( ŝ 8 జ Ƒ ቅ) జ ( ŝ PDNH ܖ҈ Ʊҵ -3- - ơ 8ȑ+LƜ7IRR R IRR F GHIV K IRRFF F J IRR F̤- 7Ѥ ȉּ) - ̵ Ʊ )Nj IRR R IRR F<GHIV K ܖȻư ঠ # 3 d FF F J IRR F e 7D E - ƣ -Ȼư˫ IRR RȻưǎIRR F<GHIV K 8 IRR F<GHIV K IRR R IRR R p ቅ)Ȼư˫8 IRR R Ʊҵ ቅ FF3 J) - 8ȑ IRR R- ׷ĎIRR F LQ F OXGH -GHIV K/LQX[BPDNHILOHB B )ŝ ܄ W[Wnj )WDUJHWV SUHUH T XLVLWHVF RPPDQG-WDUJHWV SUHUH T XLVLWHV F RPPDQGF RPPDQGWDUJHWV İ ȩ -ቱ ໘ ) 3Ʊ $F RPPDQG 3 8 J dWDUJHWUHUH T XLVLWHVe ቅ) ؿ >7D E @ 8 <SUHUH T XLVLWHV ቅ) >(SUHUH T XLVLWHVƱҵ ܖȻư Ȼư 8 JƑ ቅ) ҵ ၒ( dNj e ၒ( / - ̵ "ၚNj-8 3 Ȗ ȩ þ?ÿ Ȓ(ސ PDNH p ࣣ P ƣPDNH - Ȼư˫ <8ȑ໘ ) PDNH 81,; O6KHOO Ʊҵ E LQ VK · 3Ƒȩ -ቱ8 t) ᇍńǾ %Ď ҵ Ʋȩ -ቱ PDNH -ቱ d e d"e<d> @e - <8QL[ % 6KHOOé d a e p ƑƱ ᇍĜ× - 8 d a WHVWe -ҵ ׷̵ ´ +20( ׹ WHVW ׹ #d a K F KHQ WHVWe ´K F KHQ ҩ( ׹ WHVW ׹ -.. 8QL[ ƣ- PDNHƱ # :LQGRZV 06 '26 ´ࣣ ҩ( ׹ ቅ) é ܖ ׹ ޖ஧9 /d+20(e#t-ቱ -Ȗ 8d F e ܖ "(F 8 Ƒ -ቱ 8 d e ቅ) ᆼ)p d?e 8d? e Ҕ d e p # p Ɩ3 - G 7ѤF OHDQUP I R- 7Ѥ )- - Ȓ "6KHOOܖ -ቱ - 3 Ƒ -ቱSULQW FOSU S "WRX F K SULQW- 7Ѥ) --ቱ Ʊ Ƒ SULQWȻưǎܖ > F@ JƑ d "e %W / "Ȗၚ-R EM H F WV R- 7Ѥ - - /Ƒ )> R@ Ӎ R EM H F WV ɢҵ d Re 0DNHILOHƑ /JҔҵ & & Ƒ ҋ 8 Ȗ ơ-ቱ /ƑӍ Ʊҵ ơR EM H F WV ɢ ܖ > R@ ቅ) Ȗ -R EM H F WV ZLOG F DUG R- ˫ p dZLOG F DUGe ˫ǎ0DNHILOH ˫ p ơƢ. Ƒ / ঠ - > ¹-Ƣ ঠ ń p ׹Ƒ ܖ ׷PDNH bܼ Ȼư˫ Ȗ ̵ͪ +ؖ 3 3 ¹ +ؖ ƣPDNH ơPDNH %W b ܼ0DNHILOH Ƒ Ĝ× /d93$7+eҵ ҈ - ͩ$ 8 ࣣ - / PDNH ׷̵ ׹Ƒbܼ Ȼư < 8 t)-- / ቅ) PDNHҵ ׷׷̵ ׹ܼ ̤ ڣ̕ ̤ܖ t ׹Ƒbܼ -/LQX[BPDNHILOHB B )ŝ ܄ W[W93$7+ VU F KHDGHUVt) t ׹ dVU F e<d KHDGHUVe PDNH đ- ַ- ׹ d˾ e ׷Ď ׷̵ ׹Ü- 2 Gၠූ +ؖ ȩ PDNH d Y SDWKe˫ p ҅ I L - / - PDNH ˫ p -< ̤ ቅ 93$7+ / ńǾ 3 ҅ (ਖ਼æ ҅ t ׹Ƒ - ਖ਼æ ͩ$ ҅ ȩY SDWK SDWWHUQ! GLUH F WRULHV!( SDWWHUQ! t ׹ GLUH F WRULHV!Y SDWK SDWWHUQ!SDWWHUQ! ׹Y SDWKܖ ၠූ3- ׹Y DSWKȩ Ƒ SDWWHUQ! d e p d e Zቱ &֦p 78 d Ke ܖ d Ke "Ҽ SDWWHUQ! t- # GLUH F WRULHV! t- SDWWHUQ! ׹ 78 Y SDWK K KHDGHUV)) ࢨPDNH d KHDGHUVe ׹ ܖ d Ke"Ҽ 8 ׷̵ ׹ࣣ ܼ̤)-" ȩ Y SDWK) t ĸ 8 -" Y SDWK) Ƒ ந- SDWWHUQ! / - SDWWHUQ! ቅ) PDNH đY SDWK) G ַ · 8Y SDWK F IRRY SDWK E OLVKY SDWK F E DUJ d F e"Ҽ G dIRRe ׹ Ď d E OLVKe d E DUe ׹Y SDWK F IRR E DUY SDWK E OLVK# ) d F e"Ҽ G dIRRe ׹ Ď d E DUe ׹ ܝ d E OLVKe ׹ǔG 7ѤƑ ̤Nj d F OHDQe - d eF OHDQUP R WHPS࡙ ̵ 7ѤƑ d F OHDQe γĎ -Ƣ ") Ʊּ) 8 ҅ d e ҈ /")# dPDNH F OHDQe ȩ )( d F OHDQe- d e ౐ ǎd e ܖ PDNH ҅ Ȼư˫ <̓t҅ · -Nj - d eܝ$ơJ ׷Ď d e $< / ĎJҵ b-d e )-׷Ď (-ርˑ< / - ڣ̕ ȩ Ĝ× ၘd 3+21<e d e PDNH) ౧ - - ҵ d e3+21< F OHDQ- ౧ d F OHDQe - d F OHDQe- dPDNH F OHDQe- ǎ Nj - L3+21< F OHDQF OHDQUP R WHPS໘ࣣ Ȼư 3 Ʊ ( tܖȻư Ȓ(d6ၒ e J జ 7ҵ 8 Ȗ 0DNHILOH &֦ · 3Ȗ ౒Ρ PDNH҈- ܖ .L 0DNHILOHƑ ቅ)Ȗ ȩ d e- ĜDOO SURJ SURJ SURJ/LQX[BPDNHILOHB B )ŝ ܄ W[W3+21< DOOSURJ SURJ R XWLOV RFF R SURJ SURJ R XWLOV RSURJ SURJ RFF R SURJ SURJ RSURJ SURJ R VRUW R XWLOV RFF R SURJ SURJ R VRUW R XWLOV Rሓ 0DNHILOHƑ జ Ȓ(J6ၒ - dDOOe JȻưǎJ҅ ǎ Ĝ · ܖ JȻư ቅ ҵ 8dDOOe- ܖ J҅ ̓ၖ Ʊҵᇰ̤- d 3+21< DOOe -dDOOe- (d eɑ 7Ѥ Ʊ (Ȼư ܖ Ʊ (Ȼư 7Ѥ3+21< F OHDQDOO F OHDQR EM F OHDQGLIIF OHDQDOO F OHDQR EM F OHDQGLIIUP SURJUDPF OHDQR EMUP RF OHDQGLIIUP GLIIdPDNH F OHDQe ܖ d F OHDQR EM e<d F OHDQGLIIe- Č dѤ ַe ᇗˣdPDNH F OHDQDOOe<dPDNH F OHDQR EM e<dPDNH F OHDQGLIIe3 ᇰ̤ ń˥0DNHILOH Ƒ ࡘ J $ Ȼưǎ J 3 ȏńǾ ǎ ҵ$¹J Ʋ ׷Ď · 3 - $ ȤNj3 ȩ %W /d #e ˫ǎ%W / ၚ- - / ̵ Ƒܖ - ) $ ݣႋ - 7ѤE LJRXWSXW OLWWOHRXWSXW WH[W JJHQHUDWH WH[W J VX E VW RXWSXW # ! #- ķ ǎE LJRXWSXW WH[W JJHQHUDWH WH[W J E LJ !E LJRXWSXWOLWWOHRXWSXW WH[W JJHQHUDWH WH[W J OLWWOH !OLWWOHRXWSXWJƑ VX E VW RXWSXW # Ƒ d e · 0DNHILOH (VX E VW (Ϥ ˫ǎ ၚ- -/ - p Ɩ d #e ҵ ඪ d #eȻ ·ǎ3ͪv t) ơ ͪ <ਖ਼æ - G )WDUJHWV ! WDUJHW SDWWHUQ! SUHUH T SDWWHUQV !F RPPDQGV!WDUJHWVt)- -ቱWDUJHW SDUUWHUQ -WDUJHWV ƱҵSUHUH T SDUUWHUQV Ȼư ҅ WDUJHW SDUUWHUQ؀ ˹- Ȼư t)- -- $- ࣣ ) - Ɯ 7Ѥ ) 8 WDUJHW SDUUWHUQ!t) d R e WDUJHW! Ƒ. d Re"Ҽ #8 SUHUH T SDUUWHUQV!t) d F e WDUJHW SDUUWHUQ!ܖ؀ - nj t) J၏ļ WDUJHW SDUUWHUQ! Ƒ d e Ʊҵ bÃ-> R@- "Ҽ (Jͪ > F@- "Ҽ ؀ܖ d e dȻư eƑ.ּ) d e- p 8 Ȗ Ƒ d eቅ)Ȗ ȩ/LQX[BPDNHILOHB B )ŝ ܄ W[Wd?e- ᆼ) Ҕ d e p7ѤR EM H F WV IRR R E DU RDOO R EM H F WVR EM H F WV R F&& F &)/$*6 R #7ѤƑ - R EM H F WƑƎ d Re ܖ d Re"Ҽ Ʊҵ dIRR R E DU R e Ʊҵ / R EM H F W #Ȼư d F e d Re d e Ʊҵ dIRR E DUe (Jͪ d F e " ǎ Ȼư ҵ dIRR F E DU F e #3 Ƒ d e<d #e %W / d e ܖ Ȼư Ʊҵ dIRR F E DU F e d #e Ʊҵ dIRR R E DU Re ǎ Ӎ ķ ǎIRR R IRR F&& F &)/$*6 IRR F R IRR RE DU R E DU F&& F &)/$*6 E DU F R E DU R) 8 d Re ቅ - ౒Ρ d eҵ L҈ Ҕ ħ- d e ਖ਼æ 8 3 ቅ ͩ$ ˹ 7ѤILOHV IRR HO F E DU R ORVH RILOWHU R ILOHV R F&& F &)/$*6 R #ILOWHU HO F ILOHV HO F HOHPD F V I E DW F K E\WH F RPSLOHILOWHU R ILOHV ) 0DNHILOH ILOWHU Nj d ILOWHUe JƑ (d Re ˷v J ҅˷v ҵ )- - 7pӍ -0DNHILOHƑI %W Ȼư0DNHILOHƑ Ȼư˫ $ 8 8 PDLQ FƑ d LQ F OXGHGHIV K e ቅ) Ȼư˫ ּ)PDLQ R PDLQ F GHIV K3 8 ᇍ Ȗؿ .& - . Ȗ ͪˣ Ʊ ؽ 0DNHILOH - ࣣ "ݖ Ȓ (-ርˑ- ൗ/#cv -ڣ ȩ & & ") ͩ$ & & ") . d 0e - γ%Wܼ ঠ Ƒ Ȼư˫ 78 8 · 3FF 0 PDLQ FJᇗPDLQ R PDLQ F GHIV Kǎ ") %W Ȼư˫ - Ȗҵ ؿ˹µW+L&֦ Ȼư˫ # ") %W - ኞ 8 Ȗȩ *18 & & ") Ȗ d 00eϤ Ď d 0eϤ ¹ . Oֻ Ʊ -J FF 0 PDLQ F ᇗPDLQ R PDLQ F GHIV K XVU LQ F OXGH VWGLR K XVU LQ F OXGH IHDWXUHV K ?XVU LQ F OXGH V\V F GHIV K XVU LQ F OXGH JQX VWX E V K ?XVU OL E J FF OL E L VXVH OLQX[ LQ F OXGH VWGGHI K ?XVU LQ F OXGH E LWV W\SHV K XVU LQ F OXGH E LWV SWKUHDGW\SHV K ?XVU LQ F OXGH E LWV V F KHG K XVU LQ F OXGH OL E LR K ?XVU LQ F OXGH B*B F RQILJ K XVU LQ F OXGH Z F KDU K ?XVU LQ F OXGH E LWV Z F KDU K XVU LQ F OXGH J F RQ Y K ?XVU OL E J FF OL E L VXVH OLQX[ LQ F OXGH VWGDUJ K ?XVU LQ F OXGH E LWV VWGLRBOLP KJ FF 00 PDLQ F ᇗ/LQX[BPDNHILOHB B )ŝ ܄ W[WPDLQ R PDLQ F GHIV Kቅ) ") - ͩ$8ȑ 0DNHILOHฬ Ʋ$ (- 0DNHILOHƱ ޖ-.ঠ / ơ0DNHILOH% Ȼưǎঠ - ͩ$ நҔ Nj J҅µࢍ ᇴ Ҕந- ͩ$ *18ඪŝ ၖ¹") ( ঠ %W Ȼư˫ ̤ Ƒ ( dQDPH F e . dQDPH G e 0DNHILOH > G@ Ƒҵp ּ> F@ Ȼư˫ǎ L > F@ <> G@ Ȼư˫ ơPDNH%W % > G@ ¹J (0DNHILOHƑ - ҵ %W Ȼư˫ --/ " - / > G@G F#VHW H UP I # ?&& 0 &33)/$*6 ! # ?VHG V ? ? ? R> @ ? R # J # ! # ?UP I #- ܖ > G@ Ȼưǎ> F@ dUP I #e ܖ Ʊҵ > G@ జnj ( Ȼư d e Ʊҵ > F@ Ȼư d #e d Ge 8 & QDPH F ቅ)d eҵ dQDPHe d e ( " జnj $ dQDPH G e జ ȩ VHG3 >- ސ ˫ǎVHG3 )Ϥ ˫ ȩ జ ҵ Ƙ# ) - > -ҵ ") Ȼư˫ Ƒͪˣ> G@ Ȼư γ¹Ȼư˫PDLQ R PDLQ F GHIV KᆼPDLQ R PDLQ G PDLQ F GHIV Kǎ > G@ Ʊ %W - %W - ׷Ď Ȗ- - > G@ Ƒͪˣ Ȼư˫ 3 Ʊ ͪˣ ơ > G@ . ҈ư ҈ - Ȓ ޻ ҵ ¹-.%W - (0DNHILOHƑ ȩ 0DNHILOH dLQ F OXGHe3 ˣ 0DNHILOH ̵ ၚNj 78VRXU F HV IRR F E DU FLQ F OXGH VRXU F HV F G-) Ƒ d VRXU F HV F G eƑ d F Ge > ސ ¹ / VRXU F HV ܖ > F@ pƖ. ސ > G@ ˫ǎ- d ސe ˷v ()ŝ ၚ- ׷Ď Ȗ ַ (LQ F OXGH ᇇˣ Gᇇˣ > G@ Ƒ (6ၒ+L3üüüüƑ 3 < Ȓ "6KHOO 3 % PDNH ַ · 3 3 ؿ >7D E@ 3 + Ȼư 3 ) Ƒ İ İ 3 8 )İ İ 7D E ቅ)PDNH ၒ(J İ381,; $ ȩ 6KHOO 3 PDNH 3 6ၒ d E LQ VKeüü81,; O6KHOO ǟ· ȖĜ t J҅ 6KHOO 0DNHILOHƑ d e ǟ & & Ƒ d e J p . ǟ3- PDNH ¹J · 3 3 · ̵ᇗ ̤Ӈ֕ ׷ d#e p 3 ̵ ቅ) - 3 PDNH J 7Ѥ - ͩ$ Ӈ֕ . ٫ 8#H F KR ࡙ ");;;׷PDNH· ᇗ d࡙ ");;; e pƖ 3 ᇗ 3 8 ࣣ d#e ቅ) PDNH ᇗH F KR ࡙ ");;;࡙ ");;;8 PDNH· ˣPDNHϤ d Qe d M XVW SULQWe ቅ)J 3 3 · 3 - ͩ$ ǎ )) 0DNHILOH +L 3 · Ʋ Ǯ) Ѥ Ǯ) ַ#PDNHϤ d Ve d VOLHQWe I ࡘ3/LQX[BPDNHILOHB B )ŝ ܄ W[Wnj 3 ·׷Ȼư ǎ Ʊҵ ׷ PDNH · J 3 8 Ȗ ơ 3 " ּ 3 Ȗּ)ȩ - 3 8Ȗ జ 3 F G3 Ȗ జnj 3 F G) - ቅ)Ȗҵ $¹- 3 L #ּ)¹- 3 L 87H[H FF G KRPH K F KHQSZG7njH[H FF G KRPH K F KHQ SZG׷ · dPDNH H[H F e జ 7ѤƑ F Gࣣ Ȓ SZG ܣΰ ׷̵ 0DNHILOH ׹ #జnj 7ѤƑ F GҵƲȒ - SZG ܣΰ d KRPH K F KHQePDNH ໘ ȩ ஧9 /6+(//Ƒܖt) "6KHOO · 3 6ၒڣ̕ ȩ 81,; O6KHOOüü E LQ VK ·3 3 06 '26 ČĜ× (06 '26 ࣣ 6+(//஧9 / ׷ĎȖƱ t 8 Ȗ t-81,; ׹؀G PDNH 6+(//ܖ t +ؖƑܼ 3 ǟ 8 ܼ ̤ J ׷̵ Ƒ ׷̵ ׹Ƒ ܼ 8 ˹ܼ ̤ J 3$7+஧9 /Ƒܖt) ܖ +ؖƑ ܼ 06 '26Ƒ 8 Ȗt) 3 ǟ ࣣ ܼ̤ J "Ȗ 3 ǟ ͪ )8d H[He d F RPe d E DWe d VKeķ "3׷3 - ҈ PDNH ç 3 - 8 3 - ͩ ቅ)PDNH · 3 ׷ Ƒܖ 3 ͩ- - ҵļ ͩ҈ - 8 Ƒ 3 - 3 - ቅ)PDNHҵ ŝࡘ· ׷̵ - $ŝࡘܖ ·. 3 ҵ ) 78PNGLU3 t ĵ ׹ 8 ׹ p ቅ) PNGLUҵ ͩ· - 8 ׹p ቅ)ҵ - )ܖ ȩ PNGLU ҵ t - ׹ ǎ ҵ PNGLU #ŝࡘ -(->̤- Č 3 0DNHILOH 3 ̵ͪ d e 7D E ) ၘ( ౧3 .ၒ( ͩ 8F OHDQUP I R- IҾ ͨ "PDNHͪ d Le d LJQRUH HUURUVeϤ ቅ) 0DNHILOHƑܖ 3 . ) #8 d ,*125(eȒ( ቅ)- Ƒ ܖ 3 ) -. ś ࡘ3 Ȗ ޖȖ F ၠූ- PDNH Ϥ d Ne d NHHS JRLQJe - Ϥ 8 Ƒ 3 - ቅ)ҵŝ ) · 3""· J҅Ԩ · PDNH. Ƒ ¹ ͩ$ ঠ ׹Ƒ ׹Ƒ.+L ) ׹ 0DNHILOH - ǎơ 0DNHILOH ͪ ౒ # %ǎ¹ܖ I.L 0DNHILOHƑ - "ݖ 0DNHILOH - ܾ ǎ ")< ࢍ") 378 Ѥ ׹ VX E GLU - ׹ 0DNHILOH -- ׹ ") ቅ) Å 0DNHILOH - +LVX E V\VWHPF G VX E GLU 0$.(Jķ ǎVX E V\VWHP0$.( & VX E GLUt) 0$.( ҋ / ƱƢ PDNH .Ϥ ܖ t) / ᇍ ǎ"ݖ - 7Ѥ . G-ˣdVX E GLUe ׹ Ď · PDNH3¹- 0DNHILOH >d Å0DNHILOHe Å0DNHILOH / -̤ ś 0DNHILOHƑ 8 Ȗ 3 Ӏ 0DNHILOHƑܖt) / t-d HeϤ/LQX[BPDNHILOHB B )ŝ ܄ W[W8 Ȗ - /̤ ś0DNHILOHƑ ቅ)Ȗ ȩ -H[SRUW Y DULD E OH !8 Ȗ ơ . / -̤ ś0DNHILOHƑ ቅ)Ȗ -XQH[SRUW Y DULD E OH !87H[SRUW Y DULD E OH Y DOXHJķ ǎY DULD E OH Y DOXHH[SRUW Y DULD E OHJķ ǎH[SRUW Y DULD E OH Y DOXHJķ ǎY DULD E OH Y DOXHH[SRUW Y DULD E OH7njH[SRUW Y DULD E OH Y DOXHJķ ǎY DULD E OH Y DOXHH[SRUW Y DULD E OH8 Ȗ -ܖ / ቅ) H[SRUWҵ - Ǯ)Ʊ + -ܖ // 6+(// 0$.()/$*6 - / ౧Ȗ H[SRUW J -̤ Ӏ0DNHILOHƑ Ĝ 0$.(),/(6 / JƑ -PDNH Ϥ ٫ 8 · d Å0DNHILOHe PDNHϤ Ӏ0DNHILOHƑt)-- / ቅ)0$.(),/(6 / -.Ϥ -̤ Ӏ0DNHILOHƑ - "ś ஧9 /3 PDNH3 Ƒ Ϥ ؒ - ҅ d &e d Ie d Ked Re<d :e ˫0DNHILOHϤ ŝ༐ ) 8 Ȗ ؒ Ӏ -Ϥ ቅ) Ȗ -VX E V\VWHPF G VX E GLU 0$.( 0$.()/$*68 Ȗt)-஧9 /0$.()/$*6 ቅ)Ȗ JƑ - v. ̤ 8 JƑ d We d Qe <d T eϤ ቅ) ơȖ ̤ " Ƣ ơȖ ٘ڸ- dԨ · eƑ ᇍ Ϥ d Ze d SULQW GLUH F WRU\e PDNH Nj Ƒᇗ . ٫ ơȖ ̤ ̵ Ȓ ׹ 8 8 śPDNH ׹ d KRPH K F KHQ JQX PDNHe 8 ȩ dPDNH Ze ·ቅ)׷-ˣ) ׹ ̤PDNH (QWHULQJ GLUH F WRU\C KRPH K F KHQ JQX PDNH# ҈ ӀPDNH ׹ ̤PDNH /HD Y LQJ GLUH F WRU\C KRPH K F KHQ JQX PDNH׷Ȗȩ d &eϤ tPDNH Ӏ0DNHILOH d Ze %Wܣ 8 Ϥ Ƒ d Ve d VOLHQWe d QR SULQW GLUH F WRU\e ቅ) d Zeǔ t)38 0DNHILOHƑ ந . 3 ַ ቅ) (-. 3 ַ t) / t)- 3 ַ ) dGHILQHe dHQGHIe" 8GHILQH UXQ \D FF\D FF ILUVWZRUG A/LQX[BPDNHILOHB B )ŝ ܄ W[WP Y\ WD E F #HQGHI-/ dUXQ \D FF e - 3 p J <0DNHILOHƑ // dGHILQHe<dHQGHIeƑ ҵ 3 ַ - 3 Ƒ జ 3 - <D FF ַ (<D FF ַ d\ WD E F e ܖ జnj 3 ҵ ¹- p - ¹- 3 ̤ 7ƑIRR F IRR \UXQ \D FFȩ - 3 ҵ3 ȩ / - 3 ȩ Ƒ 3 dUXQ \D FF eƑ d A eҵ dIRR \e d #eҵ dIRR F e ˫- d e Ĝ× / 1" PDNH · 3 3 Ƒ 3 Ȼ ĵ·ȩ /üüüü0DNHILOHƑ t) / ҵ & & ) Ƒ ҋ - pƖ 0DNHILOHƑ· J %W ύ ύ Ӎ ܖȩ J & & ܖ Ȗ 0DNHILOHƑ Jɢ 0DNHILOHƑ / ȩ d e dȻư e d3 e 0DNHILOH J҅. Ƒ/ 3 p p p ඥ p 3 ּ) d e d e d e İp İ Džķ / L dIRRe d)RRe<d)22e / " 0DNHILOH / I L 3 3 Åཔȩ L ቱ / 8 0DNH)ODJV - ርˑ< " /̒௯ # -ڣ. / pƖ 8d e d #eķ -. %W / 1"// "- ɢ # ȩ " / ̵ͪ d e 3 3 d e d^` e¹ /" Ʋ 8 Ȗ ȩ Ҕ d e p ቅ)Ȗ d e/ ȩ Ƣ 8 Ƒ d e dȻưe d3 e c /Ƒ G 7ѤR EM H F WV SURJUDP R IRR R XWLOV RSURJUDP R EM H F WVFF R SURJUDP R EM H F WVR EM H F WV GHIV K/ ȩ ҅ ೜ Ӎ ҵ & & Ƒ ҋ 78IRR FSURJ R SURJ IRRIRR IRR IRR SURJ IRRӍ ̤SURJ R SURJ FFF F SURJ F׷Ď Ε Ȗ 0DNHILOHƑ- ֦ -/ Ɯ 7Ѥ 0DNHILOHƑ / ȩ Ӎ Ҕ Ѥ Jҵ d e ύ" /ͪ ҈I (- ͪs I ȩ - / 7ѤƑ 8 Ȗ " /ͪ ቅƱ3 - č ၖȖ" /ͪnj /Ƒ /t) / ɢ ȩ J҅ / - / ɢ 0DNHILOHƑ /t) / ɢG జ Ʊҵ ౒Ρ ȩ d e d e 9 / 9 / ɢ 9 / ɢ t) ȑ Ʊҵ ) 9Ƒ / t t)3 ɢ JƱ ȩ t) ɢ 8IRR E DUE DU XJKXJK +XK"DOOH F KR IRR· dPDNH DOOe ܣ / IRR ɢ d+XK"e IRR ɢ E DU E DU ɢ XJK XJK ɢ d+XK"e / ȩ / t)/LQX[BPDNHILOHB B )ŝ ܄ W[W- ͩ$ 3 Ʊ 3 3 ¹ / ҔɢÅ̤ t) 8&)/$*6 LQ F OXGHBGLUV 2LQ F OXGHBGLUV ,IRR ,E DU׷d&)/$*6e 3 Ƒ Ӎ d ,IRR ,E DU 2e 3- ؀ Ʊ 3 ቅҵ -׶t) 8&)/$*6 &)/$*6 2$ %% $- ơPDNH ˣ /Ӎ Nj Ƒb ׷Ď PDNH $V ç- t) ݗ - ҵ 8 /Ƒȩ ቅ) - ơ PDNH- ۈ ȩ PDNH dZLOG F DUGe <dVKHOOe ) (Ȗ ሓ- )(-ርˑ - ȩ PDNHƑ / t) / - ȩ d e Ȓ 8[ IRR\ [ E DU[ ODWHUJķ ǎ\ IRR E DU[ ODWHUɢ - ̵ / $ȩ / $ȩ ̵ t)3- / 8 -\ [ E DU[ IRRቅ) \ ɢ d E DUe # dIRR E DUe. . ᇍ౒Ρ /ȩ - ơ 7Ѥ JƑ -PDNH ᇰ < " /d0$.(/(9(/e ȩLIH T ^0$.(/(9(/`F XU GLU VKHOO SZGZKRDPL VKHOO ZKRDPLKRVW W\SH VKHOO DU F K0$.( ^0$.(`KRVW W\SH ^KRVW W\SH`ZKRDPL ^ZKRDPL`HQGLI˫ǎ ᇰ < ˹) ǎ " /d0$.(/(9(/e J 8 PDNH Ԩ · WȒ Ϥ ̵ dԨ ȩ PDNHe ቅ) - / ၘ׹- ׷̵0DNHILOH ) Ӏ˹1" t) / ሓ )G 7Ѥ 8 t) / Jɢ İ ቅ) -QXOOVWULQJVSD F H QXOOVWULQJ HQG RI WKH OLQHQXOOVWULQJ (PSW\ / JƑǮ)Ʊࣣ # VSD F H ɢ İ ( Ȓ NJ - İ -/ǟ ܾ ౧ G (PSW\ / / ɢ - # ǟ d e ǟ /t) ŝࡘ - t) Jɢ İ / ) -/˫ǎd e ȩ ǟ d e - Ĝ ɢ 8 - t) /GLU IRR E DU GLUH F WRU\ WR SXW WKH IUR E V LQGLU- / ɢ d IRR E DUe -+- İ 8 - ȩ - / t ׹üüd GLU ILOH eቅ)ҵ҈ -- ᇍ Ȓ d"e G 7)22"E DUJ ) 8 )22ࣣ t)Nj ቅ) /)22 ɢҵ d E DUe 8 )22G̵ t)Nj ቅ)- ) Ǯ)Ʊ > Jķ ǎLIH T RULJLQ )22 XQGHILQHG/LQX[BPDNHILOHB B )ŝ ܄ W[W)22E DUHQGLI/2ś-/1" / 2śȩ జ /ɢ ސސ /Ƒ ˩ . J d Y DU D E e d ^Y DU D E`e J ¹ /d Y DUeƑܖ dDe pƖd"Ҽe dDe ސ d E e pƖ -/ d"Ҽe dİ e d" e- 7IRR D R E R F RE DU IRR R F- 7Ƒ Gt)- d IRR e / #జnj ¹d IRR eƑܖ d Re pƖd"ҼeI. ސ d F e ܖ d E DU e ɢҵ dD F E F F F e/ ސ ܾ d e Ϥ ̵ ༐ t) 8IRR D R E R F RE DU IRR R F-Ȼưǎ ސpƖƑ Ƒؿ d e p - 7Ѥ ơ E DU / ɢ(dD F E F F F eజnj 2ś üüd¹ / ɢ˹׷ /e G 7Ѥ[ \\]D [- 7ѤƑ [ ɢ d\e ܖ [ ҵ \ ǎ D ɢҵ d]e d[\e # d [ \ e- ȩ Ӏ[ \\]]XD [-/ D ɢ dXe ˫ Å ")#% b>ơ ˹ Č ȩ d /t)Ƒȩ /e జ 7Ѥ[ \\]]+HOORD [-/ [ ސ - \ ( \ ɢ d]e ܖ ŝ" D ] Ʊҵ d+HOORe˹ Č ˹ͪ[ Y DULD E OHY DULD E OH +HOOR\ VX E VW []\D ]- 7ѤƑ d ] e·Ӎ(d \ e #J˹ ·Ӎ(d VX E VW [ e [ ɢ dY DULD E OH e VX E VW ¹d Y DULD E OH eƑ ܖ d e pƖ ސ d e pƖ ǎ d Y DULD E OH e d Y DULD E OH e ˹ Jɢ ܖ ŝ D ɢҵ Y DULD E OH ɢüüd+HOORe D 3 v- Ƒ ȩ / ඪ / p Ď ˹ JɢILUVWBVH F RQG +HOORD ILUVWE VHF RQGDOO DB E-/ d DB E eඪ -dILUVWBVH F RQGe ǎ DOO ɢҵ d+HOORe/LQX[BPDNHILOHB B )ŝ ܄ W[W˹ " జ ܾ 7ѤDBR EM H F WV D R E R F RBR EM H F WV R R RVRXU F HV D BR EM H F WV R F- 7ѤƑ 8 D ɢ dDe ) ቅ) VRXU F HV ɢҵ dD F E F F F e 8 D ɢ d e ቅ) VRXU F HV ɢ d F F F e˹ - ܾ <d e d ) e ȩ 7ѤLIGHI GRBVRUWIXQ F VRUWHOVHIXQ F VWULSHQGLIE DU D G E J T FIRR IXQ F E DU- 7Ƒ 8 t)-dGRBVRUWe ቅ) IRR VRUW D G E J T F ǎ IRR ɢҵ dD E F G J T e #8 ࣣ t)dGRBVRUWe ቅ) IRR VRUW D G E J T F ) ҵ VWULS׷Ď d¹ / ɢ˹׷ /e- ܾ Ȓ NJGLU IRRGLU BVRXU F HV ZLOG F DUG GLU FGHILQH GLU BSULQWOSU GLU BVRXU F HVHQGHI- 7ѤƑt)- / dGLUe dIRRBVRXU F HVe<dIRRBSULQWe-ͪ /ɢȩ d e Ȓ " /-ͪɢ 8R EM H F WV PDLQ R IRR R E DU R XWLOV RR EM H F WV DQRWKHU Rǎ R EM H F WV ɢ dPDLQ R IRR R E DU R XWLOV R DQRWKHU Re DQRWKHU R -ͪ-b-ȩ d e Ȓ ( - 7ѤR EM H F WV PDLQ R IRR R E DU R XWLOV RR EM H F WV R EM H F WV DQRWKHU Rܖ d e (౒8 /)̵ࣣ t)Nj ቅ) d e %W d e 8 ̵ /t) ቅ)d e "ܽǎ̵ Ȓ Ưɢ 8 ̵ d e ቅ)d e d eȒ(JƯɢ 8Y DULD E OH Y DOXHY DULD E OH PRUHķ ǎY DULD E OH Y DOXHY DULD E OH Y DULD E OH PRUH38 - ڣ̕Y DULD E OH Y DOXHY DULD E OH PRUHǎ̵ Ưɢ d e ܖ d eƱ d e >(Ưɢ ቅ)Ө / - ׶t) - 3 ܖ PDNH %W( ̓- ؿݫؽ-ǔ R Y HUULGH8 / - PDNH 3 Ϥ ၠූ ቅ)0DNHILOHƑ - / Ưɢ 8 Ȗ 0DNHILOHƑၠූ/LQX[BPDNHILOHB B )ŝ ܄ W[W-ńϤ ɢ ቅ) Ȗ ȩ dR Y HUULGHe J)R Y HUULGH Y DULD E OH! Y DOXH!R Y HUULGH Y DULD E OH! Y DOXH!׷Ď Ȗ- -ͪR Y HUULGH Y DULD E OH! PRUH WH[W!ǎ /t) GHILQH GHILQH ̵ Ʊ ȩ R YY HULGH 8R Y HUULGH GHILQH IRRE DUHQGHI˥ /- ၠූ /ɢ ȩ GHILQH˫ p ȩ GHILQH˫ pၠූ / ɢ ސ - ǎt) 3 ̵ ၚNjd3 e ܾ ҵ - ˫ pGHILQH + / p #/Ʋ t) / ɢ t) HQGHI˫ p" J Ȓ <d e Ȓ / ɢ 3 p J҅ / (3 >7D E@ ܖ 8 Ȗ GHILQHt) 3 /Ƒࣣ >7D E@ ቅ)PDNHҵ ¹Jၒ( 3- 7Ӎ -GHILQHGHILQH WZR OLQHVH F KR IRRH F KR E DUHQGHI஧9 /PDNH- "஧9 / PDNH - ᇇˣ̤0DNHILOH Ƒ 3 8 0DNHILOHƑ t)-- / - / PDNH3 ˣ ቅ) " ஧9 / ɢ 8 PDNH t-d HeϤ ቅ) "஧9 / 0DNHILOHƑt) /࡚ 8 ஧9 /Ƒၠූ-d&)/$*6e஧9 / ቅ) ҵ ܖ 0DNHILOHƑȩ - /- - ǎ ȩ " ")Ϥ ᇍ 3 8 0DNHILOHƑt)-&)/$*6 ቅ) ȩ 0DNHILOHƑ - / 8 ࣣ t) ȩ "஧9 / ɢ ˩ < " dIҾ /e<dҾ. /e Ĝ׷PDNHԨ ) Ϥ ̵ dԨ ) e ༐ Ӏ0DNHILOHƑt) / "஧9 / -̤ Ӏ 0DNHILOHƑ ׷Ď 6ၒڣ̕ -Nj3 ၠූ / - #t) Ƒ / 8 Ӏ0DNHILOH - ȩ H[SURW˫ p Ϥ ̵ ༐׷Ď Åཔ¹Ƣ /.t) "஧9Ƒ - · 0DNHILOH "/ - $ ȤI /̵ ܖၚ 0DNHILOHƑt) /. dIҾ /e . ၡ -. / ׷Ď d%W /e 8d eķ- ń/ %W /ҵӐǎd /e - / ɢȻưǎ <Ȼư t)׷Ď ( ၠූҾ. / - / (d7DUJHW VSH F LIL F 9DULD E OHe ҅ <dIҾ/e (҅ Ȓ & - c- Ƒ ܖ JɢƱ Ȓ & ˷ # ؉ IҾ / ɢJ)WDUJHW ! Y DULD E OH DVVLJQPHQW!WDUJHW ! R Y HULGH Y DULD E OH DVVLJQPHQW!Y DULD E OH DVVLJQPHQW! ̵ ၚNj Ưɢ ᇰ 8d e d e d e d e జnj ) ǎPDNH3 ˣ / "஧9 /- Ĝ ׷ ၠූ-- / - / Ȓ ̤ - ܖ ܖ Ƒb 8SURJ &)/$*6 JSURJ SURJ R IRR R E DU R&& &)/$*6 SURJ R IRR R E DU R。

Linux下Makefile的编写与使用详解

Linux下Makefile的编写与使用详解

Linux下Makefile的编写与使⽤详解⽬录MakefileMakefile⽂件命名和规则Makefile的⼯作原理Makefile变量Makefile函数Makefile clean规则Makefile⼀个⼯程⽂件中的源⽂件可能有很多,并且不同的功能、模块等都放在不同的⽬录中,常规的编译已经不能⾼效化的处理这样的问题,⽽Makefile就是为解决这⼀问题⽽来。

Makefile⼀旦写好,只需⼀个make指令,即可完成Makefile⽂件中所编写的所有指令,从⽽编译整个⼯程⽂件,极⼤的提⾼了效率。

make是⼀个命令⼯具,⽤来解释Makefile中的命令。

Makefile⽂件命名和规则⽂件命名采⽤makefile或Makefile都可。

Makefile规则Makefile中的命令规则如下:xxx(⽬标⽂件):xxx(依赖⽂件)(制表符)命令(shell命令)其中,⽬标⽂件即最终要⽣成的⽂件(伪⽬标除外),依赖⽂件即⽣成⽬标⽂件所需的⽂件,命令即shell命令。

注意,命令前必须有⼀个tab缩进。

例如:#Makefileapp: a.c b.c #⽬标:依赖gcc a.c b.c -o app #注意这⾏最开始的缩进make以上这个Makefile后就会将⽬录下的a.c与b.c编译为⽬标⽂件app。

Makefile的⼯作原理Makefile中的命令在执⾏前,会检查是否存在所需的依赖⽂件如果存在:执⾏命令如果不存在:向下检查其他规则,是否存在其他规则⽣成当前规则所需要的依赖,如果有,则执⾏该规则中的命令。

例如:#Makefileapp: a.o b.ogcc a.o b.o -o appa.o: a.cgcc -c a.c -o a.ob.o: b.cgcc -c b.c -o b.o在上⽅这个Makefile中,当执⾏到app规则时,会发现所需的依赖⽂件a.o与b.o都不存在于当前⽬录,所以会向下寻找是否有其他规则⽣成此⽂件,当寻找到a.o规则时,发现其是所需的⽂件,就执⾏gcc -c a.c -o a.o,b.o同理。

Makefile

Makefile

makefile自动化工具
CMake
跨平台的安装(编译)工具, 能够输出各种各样的makefile或者 project文件,能测试编译器所支持的C++特性,类似于automake。 Cmake不再使你在构建项目时郁闷地想自杀了。 一位KDE开发者
GNU Autotools应用
GNU
பைடு நூலகம்
Autotools指的就是下面的六个工具: 1. aclocal 2. autoscan 3. autoconf 4. autoheader 5. automake 6. libtool
GNU Autotools应用
Autotools的使用流程:
·手工编写Makefile.am这个文件。 ·在源代码目录树的最高层运行autoscan。然后手动修改 configure.scan文件,并改名为configure.in。 ·运行aclocal,它会根据configure.in的内容生成 aclocal.m4文件。 ·运行autoconf,它根据configure.in和aclocal.m4的内容生 成configure这个配置脚本文件。 ·运行automake --add-missing,它根据Makefile.am的内容 生成Makefile.in。 ·运行configure,它会根据Makefile.in的内容生成Makefile 这个文件。 获得Makefile文件后,就可以使用make程序来管理我们的工程。
1.关于可执行文件和各程序模块间的相互关系。
2.文件的修改日期
Makefile依赖关系描述
一般的语法规则为: target:dependency command

例如,对于之前的例程1,其
Makefile 可书写如上:

命令行Makefile和make命令讲解教程

命令行Makefile和make命令讲解教程

命令行Makefile和make命令讲解教程.命令行Makefile和make命令讲解教程我们知道make是Linux下的一款程序自动维护工具,配合makefile的使用,就能够根据程序中模块的修改情况,自动判断应该对那些模块重新编译,从而保证软件是由最新的模块构成。

本文分为上下两部分,我们将紧紧围绕make在软件开发中的应用展开详细的介绍。

一、都是源文件太多惹得祸当我们在开发的程序中涉及众多源文件时,常常会引起一些问题。

首先,如果程序只有两三个源文件,那么修改代码后直接重新编译全部源文件就行了,但是如果程序的源文件较多,这种简单的处理方式就有问题了。

设想一下,如果我们只修改了一个源文件,却要重新编译所有源文件,那么这显然是在浪费时间。

其次,要是只重新编译那些受影响的文件的话,我们又该如何确定这些文件呢?比如我们使用了多个头文件,那么它们会被包含在各个源文件中,修改了某些头文件后,那些源文件受影响,哪些与此无关呢?如果采取拉网式大检查的话,可就费劲了。

由此可以看出,源文件多了可真是件让人头疼的事。

幸运的是,实用程序make可以帮我们解决这两个问题——当程序的源文件改变后,它能保证所有受影响的文件都将重新编译,而不受影响的文件则不予编译,这真是太好了。

二、Make程序的命令行选项和参数我们知道,make程序能够根据程序中各模块的修改情况,自动判断应对哪些模块重新编译,保证软件是由最新的模块构建的。

至于检查哪些模块,以及如何构建软件由makefile文件来决定。

虽然make可以在makefile中进行配置,除此之外我们还可以利用make程序的命令行选项对它进行即时配置。

Make命令参数的典型序列如下所示:make [-f makefile文件名][选项][宏定义][目标]Make命令本身的命令行选项较多,这里只介绍在开发程序时最为常用的三个,它们是:–k:如果使用该选项,即使make程序遇到错误也会继续向下运行;如果没有该选项,在遇到第一个错误时make程序马上就会停止,那么后面的错误情况就不得而知了。

跟我一起写Makefile(Linux)

跟我一起写Makefile(Linux)

跟我⼀起写Makefile(Linux)
1、昨天在 Linux 下⽤ touch 指令新建了⼀个 hello.c 并且使⽤ vim 编辑器写了代码,使⽤ gcc 指令编译最后运⾏成功了。

具体⽅式如下:
在Linux 根⽬录/ 下 root ⽂件下新建⼀个 learngit ⽂件夹(mkdir 指令),使⽤touch 指令创建⽂件 hello.c,使⽤vim 打开并编写以下代码
#include <stdio.h>
void main()
{
printf("Hello World\n");
}
接着使⽤指令: gcc hello.c,会发现在 learngit ⽂件下⽣成了 a.out ⽂件
接着使⽤ ./a.out 会发现会输出"Hello World",这⾥查了⼀下./ 表⽰当前⽬录,../表⽰上⼀⽬录。

2017年2⽉23⽇16:43:14。

# 根据Makefile 的过程1。

应该第⼀步:在所在的hello.c ⽂件路径下,新建⼀个⽂件名字为 Makefile”或“makefile”的⽂件。

# 根据Makefile 的过程2、3。

应该第⼆步:⽤ vim 打开 Makefile⽂件,第⼀⾏写代码 edit : hello.o
注意在 Makefile中不能随便出现 table,因为table代表接下来的信息是命令,命令⾏会被识别成红⾊如下截图!(注意截图中红⾊字体前⾯有⼀个 table 长度为4)
2017年2⽉25⽇18:42:42。

Linux下Makefile简单教程

Linux下Makefile简单教程

目录一:Makefile基本规则1.1示例1.2 隐式规则1.3 伪目标1.4 搜索源文件二:变量2.1使用变量定义变量值2.2追加变量三:条件判断四:函数Linux下Makefile总结——一步MakeFile可以看做是一种简单的编程语言,其诞生的本质目的是实现自动化编译。

以Linux下gcc-c编译器为例,编译一个c语言程序需要经过以下几个步骤:1.将c语言源程序预处理,生成.i文件;2.预处理后的.i语言编译成汇编语言,生成.s文件;3.汇编语言经过汇编,生成目标文件.o文件;4.将各个模块的.o文件链接起来,生成一个可执行程序文件。

我们知道,在Visual C++6.0中,可以新建一个工程,在一个工程当中能够包含若干个c语言文件,则编译的时候直接编译整个工程便可。

Linux下无法为多个c语言文件新建工程,但可以通过MakeFile实现它们的整合编译。

如上gcc-c编译步骤,如果使用Makefile则过程为:.C文件——>.o文件——>可执行文件当然,Makefile中也加入了自己的设置变量方法与集成了一些函数,能够更有效地方便用户使用。

/**************************分隔符********************************/ 一:Makefile基本规则1.1示例target ... : prerequisites ...command......target也就是一个目标文件,可以是Object File,也可以是执行文件。

prerequisites就是,要生成那个target所需要的文件或是目标。

command也就是make需要执行的命令。

(任意的Shell命令)为了方便理解,我们来看一个示例:/*Makefile示例*/edit : main.o kbd.o command.o display.o /insert.o search.o files.o utils.ogcc -o edit main.o kbd.o command.o display.o /insert.o search.o files.o utils.omain.o : main.c defs.h #生成main.ogcc -c main.ckbd.o : kbd.c defs.h command.h #生成kdb.ogcc -c kbd.ccommand.o : command.c defs.h command.h #生成command.ogcc -c command.cdisplay.o : display.c defs.h buffer.h #生成display.ogcc -c display.cinsert.o : insert.c defs.h buffer.h #生成insert.ogcc -c insert.csearch.o : search.c defs.h buffer.h #生成search.ogcc -c search.cfiles.o : files.c defs.h buffer.h command.h #生成files.ogcc -c files.cutils.o : utils.c defs.h #生成utils.ogcc -c utils.cclean :rm edit main.o kbd.o command.o display.o /insert.o search.o files.o utils.o/*END*/执行输入:make -s edit反斜杠(/)是换行符的意思。

Linux下Makefile的automake生成全攻略

Linux下Makefile的automake生成全攻略

作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。

一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。

在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make instal”就可以把程序安装到Linux系统中去了。

这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。

一、Makefile介绍Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。

Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。

当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。

Makefile的基本结构不是很复杂,但当一个程序开发人员开始写Makefile 时,经常会怀疑自己写的是否符合惯例,而且自己写的 Makefile经常和自己的开发环境相关联,当系统环境变量或路径发生了变化后,Makefile可能还要跟着修改。

这样就造成了手工书写 Makefile的诸多问题,automake恰好能很好地帮助我们解决这些问题。

使用automake,程序开发人员只需要写一些简单的含有预定义宏的文件,由autoconf根据一个宏文件生成configure,由automake根据另一个宏文件生成Makefile.in,再使用configure依据Makefile.in来生成一个符合惯例的Makefile。

Linux关于Makefile的用法介绍

Linux关于Makefile的用法介绍

Linux关于Makefile的用法介绍对于GNU Make或许很多Windows开发的程序员并不是很了解,因为Windows中的很多集成开发环境(IDE)都帮我们做了这件事。

但是作为一个专业从事Linux 嵌入式开发的程序员就必须要了解GNU Make,会不会使用GNU Make从一定角度上反应了一个人是否具备大型工程能力。

本文主要围绕Make命令展开,介绍Linux下Make的使用以及Makefile的语法和使用Make进行源码安装。

一、什么是GNU MakeGNU Make是一个控制从程序的源文件中生成程序的可执行文件和其他非源文件的工具。

Make可以从一个名为Makefile的文件中获得如何构建程序的知识,该文件列出了每个非源文件以及如何从其他文件计算它。

当你编写一个程序时,你应该为它编写一个Makefile 文件,这样就可以使用Make来编译和安装这个程序。

二、如何获取MakeMake可以在GNU的主要FTP服务器上找到:http ://ftp.gnu/gnu/make/ (通过HTTP)和ftp://ftp.gnu/gnu/make/ (通过FTP)。

它也可以在GNU镜像列表上找到; 请尽可能GNU的镜像列表。

三、为什么需要Make任何一种技能或知识都是源之于某种社会需求,那为什么要用Make 呢?当项目源文件很少的时候,我们也许还可以手动使用gcc命令来进行编译,但是当项目发展到一个庞大的规模时,再手动敲gcc命令去编译就变得不可能的事情。

所以呢,在这样的历史背景下,就出现了一位大牛(斯图亚特·费尔德曼),在1977年贝尔实验室制作了这样一个软件,它的名字就叫做Make。

所以实际开发中,我们在编译大型项目的时候往往会使用Make进行编译,为此我们还需要了解Make软件所依赖的Makefile规则文件。

四、MakefileMakefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。

Linux学习笔记——例说makefile头文件查找路径

Linux学习笔记——例说makefile头文件查找路径

Linux学习笔记——例说makefile头⽂件查找路径0.前⾔从学习C语⾔開始就慢慢開始接触makefile,查阅了⾮常多的makefile的资料但总感觉没有真正掌握makefile,假设⾃⼰动⼿写⼀个makefile总认为⾮常吃⼒。

所以特意借助博客总结makefile的相关知识,通过样例说明makefile的详细使⽤⽅法。

例说makefile分为下⾯⼏个部分,很多其它内容请參考【】1.仅仅有单个C⽂件2.含有多个C⽂件3.须要包含头⽂件路径4.添加宏定义5.添加系统共享库6.添加⾃⼰定义共享库7.⼀个实际的样例【代码仓库】——代码仓库位于bitbucket,可借助TortoiseHg(GUI⼯具)克隆代码或者在⽹页中直接下载zip包。

1.三个C⽂件和三个头⽂件此处的样例略微复杂些但更接近实际情况。

⽂件结果例如以下:根⽬录中包括test.c makefileh和⽬录test-add和⽬录test-sub。

test.c makefile【test-add】test-add.c test-add.h【test-sub】test-sub.c test-sub.h【test.c】#include <stdio.h>#include <test-add.h>#include <test-sub.h>int main(void){int a = 3;int b = 2;printf("a=%d\n", a);printf("b=%d\n", b);printf("a+b=%d\n", add(a,b));printf("a-b=%d\n", sub(a,b));return 0;}【test-add.c】#include <test-add.h>int add(int a, int b){return a+b;}【test-add.h】#ifndef __TEST_ADDint add(int a, int b);#endif【test-sub.c】#include "test-sub.h"int sub(int a, int b){return a-b;}【test-sub.h】#ifndef __TEST_SUBint sub(int a, int b);#endif2.复习gcc指令gcc指令可通过-I前缀指定头⽂件路径,特别说明./代表当前路径,../代表上⼀级⽂件夹。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录一:Makefile基本规则1.1示例1.2 隐式规则1.3 伪目标1.4 搜索源文件二:变量2.1使用变量定义变量值2.2追加变量三:条件判断四:函数Linux下Makefile总结——一步MakeFile可以看做是一种简单的编程语言,其诞生的本质目的是实现自动化编译。

以Linux下gcc-c编译器为例,编译一个c语言程序需要经过以下几个步骤:1.将c语言源程序预处理,生成.i文件;2.预处理后的.i语言编译成汇编语言,生成.s文件;3.汇编语言经过汇编,生成目标文件.o文件;4.将各个模块的.o文件链接起来,生成一个可执行程序文件。

我们知道,在Visual C++6.0中,可以新建一个工程,在一个工程当中能够包含若干个c语言文件,则编译的时候直接编译整个工程便可。

Linux下无法为多个c语言文件新建工程,但可以通过MakeFile实现它们的整合编译。

如上gcc-c编译步骤,如果使用Makefile则过程为:.C文件——>.o文件——>可执行文件当然,Makefile中也加入了自己的设置变量方法与集成了一些函数,能够更有效地方便用户使用。

/**************************分隔符********************************/ 一:Makefile基本规则1.1示例target ... : prerequisites ...command......target也就是一个目标文件,可以是Object File,也可以是执行文件。

prerequisites就是,要生成那个target所需要的文件或是目标。

command也就是make需要执行的命令。

(任意的Shell命令)为了方便理解,我们来看一个示例:/*Makefile示例*/edit : main.o kbd.o command.o display.o /insert.o search.o files.o utils.ogcc -o edit main.o kbd.o command.o display.o /insert.o search.o files.o utils.omain.o : main.c defs.h #生成main.ogcc -c main.ckbd.o : kbd.c defs.h command.h #生成kdb.ogcc -c kbd.ccommand.o : command.c defs.h command.h #生成command.ogcc -c command.cdisplay.o : display.c defs.h buffer.h #生成display.ogcc -c display.cinsert.o : insert.c defs.h buffer.h #生成insert.ogcc -c insert.csearch.o : search.c defs.h buffer.h #生成search.ogcc -c search.cfiles.o : files.c defs.h buffer.h command.h #生成files.ogcc -c files.cutils.o : utils.c defs.h #生成utils.ogcc -c utils.cclean :rm edit main.o kbd.o command.o display.o /insert.o search.o files.o utils.o/*END*/执行输入:make -s edit反斜杠(/)是换行符的意思。

我们来回忆一下一个c语言编译的过程:c语言文件:main.c1.gcc main.c -c main.o2. gcc main.o -o main经过这两步便可以编译出可执行文件:main。

现在我们再看上面的Makefile:main.o : main.c defs.h #生成main.ogcc -c main.c这两句便生成main.o文件(main.c与defs.h为用到的源文件)。

之后edit:main.o ...gcc -o edit main.o ...便会生成main可执行文件;同理,其他几个文件亦是。

“edit”便是最终编译出的可执行文件名。

可以看到Makefile只是整合了编译过程,也可以同时编译多个文件,其诞生的本质目的确实是为了实现自动化编译。

1.2隐式规则make工具会自动使用gcc -c命令,将一个扩展名为.c的c语言程序源文件编译成一个同名的.o目标文件。

因此,在上例中,将:main.o : main.c defs.h #生成main.ogcc -c main.c改为:main.o :defs.h(即去掉源同名c语言文件名,其他几个文件亦是如此。

)这样便使用了隐式规则,隐式规则只是节省了敲代码的数量。

1.3 伪目标可以注意到上述示例中末尾有几行代码:clean :rm edit main.o kbd.o command.o display.o /insert.o search.o files.o utils.o这几行代码并不会编译生成文件,可以把它们看成是Makefile里附加的实现小功能的程序(Makefile里藏了shell小程序),这个名称为clean的目标便叫做伪目标。

我们可以直接输入:make clean来运行这个伪目标。

显然,此伪目标可以清除之前生成的.o目标文件以及edit执行文件。

为了防止命名的重复,可以使用.PHONY来显式地指明一个伪目标:.PHONY cleanclean :rm edit main.o kbd.o command.o display.o /insert.o search.o files.o utils.o这样就不会对clean这个目标的性质定义产生混乱了。

/*********看完上面应该基本知道Makefile用途了******************/1.4搜索源文件在一些大的工程中,有大量的源文件,我们通常的做法是把这许多的源文件分类,并存放在不同的目录中。

所以,当make需要去找寻这些相关源文件时,需要在文件前加上路径,但最好的方法是把一个路径告诉make,让make自动去找。

Makefile文件中的特殊变量“VPATH”就是完成这个功能的,如果没有指明这个变量,make只会在当前的目录中去找寻依赖文件和目标文件。

如果定义了这个变量,那么,make就会在当前目录找不到的情况下,到所指定的目录中去找寻文件了。

VPATH = src:../headers上面的的定义指定两个目录,“src”和“../headers”,make会按照这个顺序进行搜索。

目录由“冒号”分隔。

(当然,当前目录永远是最高优先搜索的地方)。

另一个设置文件搜索路径的方法是使用make的“vpath”关键字(注意,它是全小写的),这不是变量,这是一个make的关键字,这和上面提到的那个VPATH 变量很类似,但是它更为灵活。

它可以指定不同的文件在不同的搜索目录中。

这是一个很灵活的功能。

它的使用方法有三种:1.vpath <pattern> <directories>为符合模式<pattern>的文件指定搜索目录<directories>。

2.vpath <pattern>清除符合模式<pattern>的文件的搜索目录。

3.vpath清除所有已被设置好了的文件搜索目录。

vpath使用方法中的<pattern>需要包含“%”字符。

“%”的意思是匹配零或若干字符,例如,“%.h”表示所有以“.h”结尾的文件。

<pattern>指定了要搜索的文件集,而<directories>则指定了<pattern>的文件集的搜索的目录。

例如:vpath %.h ../headers该语句表示,要求make在“../headers”目录下搜索所有以“.h”结尾的文件。

(如果某文件在当前目录没有找到的话)我们可以连续地使用vpath语句,以指定不同搜索策略。

如果连续的vpath语句中出现了相同的<pattern>,或是被重复了的<pattern>,那么,make会按照vpath语句的先后顺序来执行搜索。

如:vpath %.c foovpath %.c blishvpath %.c bar其表示“.c”结尾的文件,先在“foo”目录,然后是“blish”,最后是“bar”目录。

vpath %.c foo:barvpath %.c blish而上面的语句则表示“.c”结尾的文件,先在“foo”目录,然后是“bar”目录,最后才是“blish”目录。

/**************************分隔符*******************************/ 二:变量为了增强Makefile的功能与增加程序的可移植性,Makefile中也使用了变量。

看个例子:/*Makefile示例*/#此处为变量设置CC = gccFLAGS = -cobjects = main.o kbd.o command.o display.o /insert.o search.o files.o utils.oedit :$(objects)CC -o edit $(objects)main.o : main.c defs.h #生成main.oCC FLAGS main.ckbd.o : kbd.c defs.h command.h #生成kdb.oCC FLAGS kbd.ccommand.o : command.c defs.h command.h #生成command.oCC FLAGS command.cdisplay.o : display.c defs.h buffer.h #生成display.oCC FLAGS display.cinsert.o : insert.c defs.h buffer.h #生成insert.oCC FLAGS insert.csearch.o : search.c defs.h buffer.h #生成search.oCC FLAGS search.cfiles.o : files.c defs.h buffer.h command.h #生成files.oCC FLAGS files.cutils.o : utils.c defs.h #生成utils.oCC FLAGS utils.c.PHONY cleanclean :rm edit $(objects)/*END*/此时,程序便有了很好的可修改性与移植性。

相关文档
最新文档