imake 命令

用途

make 命令的 C 预处理器接口。

语法

imake [ -D定义 ] [ -I目录 ] [ -T模板 ] [ -f FileName ] [ -C FileName ] [ -s FileName ] [ -e ] [ -v ]

描述

imake 命令从模板、cpp 宏功能集和名为 Imakefile 的每个目录输入文件生成 Makefiles。 该命令保持机器相关性(例如编译器选项、备用命令名和特殊的 make 命令规则)与要构建的项的描述分开。

伊米耶 使用在命令行上传递的任何 -我-D 标志调用 cpp ,并将以下三行传递给它:

#define IMAKE_TEMPLATE "Imake.tmpl"
#define INCLUDE_MAKEFILE "Imakefile"
#include IMAKE_TEMPLATE

分别使用 -T-f 标志覆盖 Imake.tmplImakefile

IMAKE_TEMPLATE 通常读取以下文件:

  • 与机器相关的参数文件,在该文件中,将参数指定为 cpp 符号
  • 特定于站点的参数文件
  • 用于定义变量的文件
  • 包含用于生成 make 命令规则的 cpp 宏功能的文件
  • 当前目录中的 Imakefile(由 INCLUDE_IMAKEFILE 指定)。

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 广泛使用 伊米耶 命令。 设置两个特殊变量 TOPDIR 和 CURDIR 以更容易地使用相对路径名生成参考文件。 例如,自动生成以下命令以在 lib/X 目录(相对于源的开头部分)中构建 Makefile

%  ../.././config/imake  -I../.././config  \
             -DTOPDIR=../../.  -DCURDIR=./lib/X

要在源树外部构建 AIXwindows 程序,请定义一个特殊符号 UseInstalled,并省略 TOPDIR 和 CURDIR 变量。 如果正确安装了配置文件,那么您可以使用 xmkmf 命令。

伊米耶 命令将读取 AIXwindows所使用的以下文件。

注: 缩进的格式指示包含其他文件的文件。
Imake.tmpl                  generic variables
   site.def                 site-specific, BeforeVendorCF defined
         *.cf               machine-specific
             *Lib.rules     shared library
   site.def                 site-specific, AfterVendorCF defined
   Imake.rules              rules
   Project.tmpl             X-specific variables
         *Lib.tmpl          shared library variables
Imakefile
   Library.tmpl             library rules
   Server.tmpl              server rules
   Threads.tmpl              multi-thread rules
注: site.def 文件包含两次,包括在 *.cf 文件之前和之后。 虽然多数位置定制都在 *.cf 文件之后指定,但一些位置定制(例如编译器的选择)需要在该文件之前定制,因为其他变量设置可能取决于它们。

第一次包括 site.def 文件时,定义 BeforeVendorCF 变量,第二次时定义 AfterVendorCF 变量。 site.def 文件中的所有代码都应该放置在 #ifdef 宏中以获取这些符号之一。

标志

描述
-D定义 直接传递到 cpp 以设置特定于目录的变量。 例如,X-windows 使用该标志将 TOPDIR 变量设置为包含核心分发的开头部分的目录名,而将 CURDIR 变量设置为与该开头部分相关的当前目录名。
-e 表示 imake 命令应该执行已生成的 Makefile。 缺省值会将它留给用户。
-f FileName 指定每个目录输入文件的名称。 缺省值为 Imakefile 文件。
-I目录 (大写 i)直接传递给 cpp 以表示 imake 模板和配置文件所在的目录。
-C FileName 指定在当前目录中构造的 .c 文件的名称。 缺省值为 Imakefile.c
-s FileName 指定要生成的 make 描述文件的名称,但不调用 make 命令。 如果 FileName 变量是 -(连字符),那么将输出写入 stdout。 缺省为生成但不执行 Makefile
-T模板 指定通过 cpp 命令使用的主模板文件(通常位于与 -I 一起指定的目录中)的名称。 缺省值为 Imake.tmpl
-v 表示 imake 应该打印正在用来生成 Makefile cpp 命令行。

环境变量

注: 可能已设置以下环境变量,但建议不要使用这些变量,因为它们引入了 伊米耶 命令运行时不容易显现的依赖关系。
描述
Makeinclude 如果已定义,请指定 C 预处理器的包含参数。 例如:
-I/usr/include/local 
IMAKECPP 如果已定义,请指定至预处理器程序的有效路径。 例如:
/usr/local/cpp

缺省值为 /lib/cpp 程序。

IMAKEMAK 指定至 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/cp 缺省 C 预处理器。