AIX命令参考大全,卷 3,i - m - makedepend 命令

[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]

AIX命令参考大全,卷 3,i - m

makedepend 命令

用途

在 makefile 中创建相关性

语法

makedepend [ -DName=Def] [ -DName] [ -IIncludeDir ] [ -YIncludeDir ] [ -a ] [ -fMakeFile ] [ -oObjSuffix ] [ -pObjPrefix ] [ -sString ] [ -wWidth ] [ -v] [ -m ] [ --Options-- ] SourceFile ...

描述

makedepend 命令按顺序读取每个 SourceFile,并且像 C 预处理器那样对其进行语法分析。它处理所有的 #include、#define、#undef、#ifdef#ifndef、#endif、#if 和 #else 伪指令来确定在编译中需要用到哪些 #include 伪指令。任何 #include 伪指令都能够引用含有其它 #include 伪指令的文件,并且同样在那些文件中进行语法分析。

SourceFile 直接或间接包含的每个文件都被 makedepend 称为一个“相关性”。这些相关性以下列方式写到 makefile 中:在相关性更改时,make 命令能够确定必须重新编译哪些对象文件。

缺省情况下,如果名为 makefile 的文件存在,那么 makedepend 把它的输出就放到这个文件中,否则放到 Makefile 文件中。可以用 -f 标志指定一个备用 makefile。makedepend 首先在可用的文件中搜索这一行:

# DO NOT DELETE THIS LINE - makedepend 取决于它。

或者具有 -s 标志的一行作为相关性输出的定界符。如果它找到这一行,那么它将 makefile 中的这一行后面的所有内容删除,然后把输出放到这一行的后面。如果 makedepend 没有找到这一行,那么它将 makefile 的末尾附加到定界字符串,然后在这个字符串后面放置输出。

对于在命令行上出现的每一个 SourceFilemakedepend 在 makefile 中按以下格式放置各行。

SourceFile.o: dfile ...

其中,SourceFile.o 来自后缀被 .o 取代的命令行的名称,且 dfile 是一个相关性,当对 SourceFile 或其包含的一个文件进行语法分析时,在 #include 伪指令中出现该相关性。

此命令行中所用的算法假定所有通过单一 makefile 编译的文件将被大致以与 -I-D 标志相同的方式编译,且在单一目录中的多数文件大部分包含相同的文件。

如果有这些假定,且在所有的源文件都由出现在命令行上的 makefile 来维护的情况下,makedepend 期望每一个 makefile 都被调用一次。它只对每个源文件和包含文件语法分析一次,且为每个文件维护一个内部符号表。结果是,命令行上的第一个文件花费的时间和正常的 C 预处理器花费的时间成比例。在后继的文件中,如果它遇到已经语法分析过的包含文件,那么它将不会再次语法分析。

例如,设想正在编译 file1.cfile2.c 这两个文件,每个文件都包含 header.h 头文件。header.h 文件包含 def1.h 文件和 def2.h 文件。

makedepend file1.c file2.c

那么 makedepend 将首先对 file1.c 进行语法分析,然后依次对 header.hdef1.hdef2.h 进行语法分析。然后它决定第一个文件的相关性是:

file1.o: header.h def1.h def2.h

但是当程序对第二个文件 file2.c 进行语法分析时,会发现它也包含 header.h,它并不对该文件进行语法分析,仅把 header.hdef1.hdef2.h 添加到 file2.o 的相关性列表。

注:如果没有 cpp(Berkeley C 预处理器)源,那么 makedepend 将以下列的方式编译:不管所有的 #if 伪指令的实际值而把它们都赋值为 False。这将导致错误的 #include 伪指令被赋值。在这些情况下,建议为 #if 表达式写一个新的解析器。下例明显地需要一个新的解析器:

设想对 file1.cfile2.c 这两个文件进行语法分析,每个文件都包含 def.h 文件。当 def.hfile1.c 包含的时间先于它被 file2.c 包含的时间时,def.h 包含的文件列表可能有很大差别。但是一旦 makedepend 到达文件相关性列表时,它的特征便是固定的了。

标志

注:makedepend 命令忽略它不认识的标志。标志的用途与 cc 命令类似。
-DName=Def-DName makedepend 命令符号表中的 Name 变量进行定义。如果没有 =Def 说明符,则符号被定义为 1。
-IIncludeDir 当遇到 #include 伪指令时,对 makedepend 命令搜索的目录列表预先考虑 IncludeDir 变量。缺省情况下,makedepend 命令仅搜索 /usr/include 目录
-YIncludeDir 用一个指定的包含目录代替所有的标准包含目录,也可以省略 IncludeDir 使得不再搜索标准包含目录。
-a 把相关性附加到文件末尾而不是取代它们。
-fMakeFile 使您能够指定一个可以放置命令输出的备用 makefile。
-oObjSuffix 指定对象后缀。例如,某些系统也许有不同于 .o 的后缀的对象文件。这个标志使您能够另外指定一个后缀,例如带有 -o.b 的“.b” 后缀或带有 -o.obj 的“:obj”后缀等等。
-pObjPrefix 对于对象文件名预先考虑对象文件前缀。这个标志用来为对象文件指定不同的目录。缺省值为空字符串。
-sString 指定开始字符串定界符。这个标志允许您在 makefile 中搜索时为 makedepend 指定不同的字符串。
-wWidth 更改输出行的最大行宽。缺省的最大行宽是 78 个字符。
-v 使得 makedepend 显示在标准输入上由每个输入文件包含的文件列表。
-m 如果任何输入文件包含另一个文件多于一次,则使 makedepend 显示一个警告信息。在以前的 makedepend 版本中,这是缺省行为。这个标志是为了向后兼容而提供的,且在有关多个包含的调试问题中有用。
--选项-- 忽略包含在开头和结尾的双连字符中间的任何不可识别的参数。当 makedepend 在参数列表中遇到双连字符(--)时,随后的任何不可识别的参数都被忽略,而没有任何提示;第二个双连字符终止这种操作。双连字符使得 makedepend 安全地忽略隐藏的编译器参数,这些参数也许通常能够在 CFLAGE make 命令宏(请参阅示例段)中找到。makedepend 能够识别的标志以及出现于成对的双连字符之间的标志都被正常处理。

示例

通常地,makedepend 将用于 makefile 目标中,以便输入 makedepend 可更新 makefile 的相关性。

SRCS=file1.c file2.c ...
CFLAGS=-O -DHACK -I../foobar -xyz
depend:
      makedepend -- $(CFLAGS) -- $(SRCS)

相关信息

cc 命令和 make 命令。

[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]