至 make 命令的 C 预处理器接口。
imake [ -DDefine ] [ -IDirectory ] [ -TTemplate ] [ -f FileName ] [ -C FileName ] [ -s FileName ] [ -e ] [ -v ]
imake 命令从模板、cpp 宏功能集和名为 Imakefile 的每个目录输入文件生成 Makefiles。该命令保持机器相关性(如编译器选项、备用命令名和特殊的 make 命令规则)与要构建的项的描述分开。
imake 使用任何在命令行上传递的 -I 或 -D 标志调用 cpp,并向它传递以下三行内容:
#define IMAKE_TEMPLATE "Imake.tmpl"#define INCLUDE_MAKEFILE "Imakefile"#include IMAKE_TEMPLATE
通过使用 -T 和 -f 标志来分别覆盖 Imake.tmpl 和 Imakefile。
IMAKE_TEMPLATE 通常读以下文件:
Imakefile 文件使用宏功能来表示要构建的目标,imake 命令生成相应的规则。
Imake 配置文件包含两种类型的变量,imake 变量和 make 变量。当运行 imake 命令时,由 cpp 解释 imake 变量。根据约定,它们不区分大小写。通过 make 命令将 make 变量写入 Makefile 以备日后解释。根据约定,make 变量是大写的。
规则文件(在配置目录中通常命名为 Imake.rules)包含根据当前平台配置的多种 cpp 宏功能。imake 命令使用换行(回车符)替换任何出现的字符串 ``@@'' 以支持生成不止一行的 make 规则的宏。例如,宏:
#define program_target(program, objlist) @@/program: objlist @@/ $(CC) -o $@ objlist $(LDFLAGS)
这时以 program_target(foo,foo1.ofoo2.o) 调用的将扩展到:
foo: foo1.o foo2.o $(CC) -o $@ foo1.o foo2.o $(LDFLAGS)
在 cpp 将多个制表符和空格减少为单一空格的系统上,imake 命令尝试后退任何必要的制表符(make 命令区分制表符和空格)。鉴于此原因,在命令行中的所有冒号(:)之前加反斜杠 (/)。
对于源树中的完全构建和外部软件构建,AIXwindows 广泛使用 imake 命令。设置两个特殊变量 TOPDIR 和 CURDIR 以更容易地使用相对路径名生成参考文件。例如,自动生成以下命令以在 lib/X 目录(相对于源的开头部分)中构建 Makefile:
% ../.././config/imake -I../.././config / -DTOPDIR=../../. -DCURDIR=./lib/X
要构建源树外部的 AIXwindows 程序,定义特殊符号 UseInstalled 并省略 TOPDIR 和 CURDIR变量。如果正确安装了配置文件,则可以使用 xmkmf命令。
imake 命令读以下文件(当通过 AIXwindows 使用时)。
注:缩进的格式表示包括其它文件的文件。
Imake.tmpl 类属变量 site.def 特定站点,BeforeVendorCF 已定义 *.cf 特定机器 *Lib.rules 共享库 site.def 特定站点,AfterVendorCF 已定义 Imake.rules 规则 Project.tmpl 特定于 X 的变量 *Lib.tmpl 共享库变量Imakefile Library.tmpl 库规则 Server.tmpl 服务器规则 Threads.tmpl 多线程规则
注:包括两次 site.def 文件(在 *.cf 之前和之后)。虽然多数位置定制都在 *.cf 文件之后指定,但一些位置定制(如编译器的选择)需要在该文件之前定制,因为其它变量设置可能取决于它们。第一次包括 site.def 文件时,定义 BeforeVendorCF 变量,第二次时定义 AfterVendorCF 变量。site.def 文件中的所有代码都应该放置在 #ifdef 宏中以获取这些符号之一。
| -DDefine | 直接传递到 cpp 以设置特定于目录的变量。例如,X-windows 使用该标志将 TOPDIR 变量设置为包含核心分发的开头部分的目录名,而将 CURDIR 变量设置为与该开头部分相关的当前目录名。 |
| -e | 表示 imake 命令应该执行已生成的 Makefile。缺省值将把它留给用户。 |
| -f FileName | 指定每个目录输入文件的名称。缺省值为 Imakefile 文件。 |
| -IDirectory | (大写 i)直接传递给 cpp 以表示 imake 模板和配置文件所在的目录。 |
| -C FileName | 指定在当前目录中构造的 .c 文件的名称。缺省值为 Imakefile.c。 |
| -s FileName | 指定要生成的 make 描述文件的名称,但不调用 make 命令。如果 FileName 变量是 -(连字符),则将输出写为 stdout。缺省值将生成但不执行 Makefile。 |
| -TTemplate | 指定通过 cpp 命令使用的主模板文件(通常位于与 -I 一起指定的目录中)的名称。缺省值为 Imake.tmpl。 |
| -v | 表示 imake 应该打印正在用来生成 Makefile 的 cpp 命令行。 |
注:可以设置以下环境变量,但不推荐使用这些变量,因为当运行 imake 命令时,它们会产生不太明显的依赖性。
| IMAKEINCLUDE | 如果已定义,请指定 C 预处理器的包含自变量。例如:-I/usr/include/local |
| IMAKECPP | 如果已定义,请指定至预处理器程序的有效路径。例如:/usr/local/cpp 缺省值为 /lib/cpp 程序。 |
| IMAKEMAKE | 指定至 make 程序的有效路径,如 /usr/local/make。缺省情况下,imake 使用通过使用 execvp 子例程发现的任何 make 程序。只有指定了 -e 标志才使用该变量。 |
imake -I/usr/lib/X11/config -DTOPDIR=/usr/lpp/X11/Xamples
| /usr/tmp/tmp-imake.nnnnnn | 指定 cpp 预处理器的临时输入文件。 |
| /usr/tmp/tmp-make.nnnnnn | 指定 make 的临时输入文件。 |
| /lib/cpp | 缺省 C 预处理器。 |
make 命令、xmkmf 命令。