至 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.o foo2.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 宏中以获取这些符号之一。
注:可以设置以下环境变量,但不推荐使用这些变量,因为当运行 imake 命令时,它们会产生不太明显的依赖性。
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 预处理器。 |