指定自定义生成步骤

更新:2007 年 11 月

自定义生成步骤为生成系统提供从输入文件生成输出文件所需的信息。自定义生成步骤附加在其输入文件上;它包含要运行的命令,由这些命令生成的输出文件的列表,以及命令的说明(可选)。

有关自定义生成步骤的常规信息,请参见了解自定义生成步骤和生成事件

指定自定义生成步骤

  1. 打开该项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性

  2. 在“配置”框中选择要为其指定自定义生成步骤的配置。

  3. 在解决方案资源管理器中,选择自定义生成步骤的输入文件。

    如果没有显示“自定义生成步骤”文件夹,则所选择的文件有与之关联的默认步骤。例如,.c 和 .cpp 文件有一个调用编译器的默认步骤。若要重写默认设置,可修改“工具”属性,它位于“配置设置”文件夹中。

  4. 指定与自定义生成步骤关联的属性:

    • 在“附加依赖项”中,除了为自定义生成步骤定义的文件以外,指定任何附加文件(与自定义生成步骤关联的文件被隐式认为是该步骤的输入)。对于自定义生成步骤,附加输入文件不是必需的。如果有一个以上的附加输入文件,可使用分号将它们分开。

      如果“附加依赖项”文件的日期晚于输入文件的日期,则会运行自定义生成规则。如果所有的“附加依赖项”文件的日期都早于输入文件的日期,而输入文件的日期早于**“输出”**文件的日期,则不会运行自定义生成步骤。

      例如,假设有一个自定义生成步骤将 MyInput.x 作为输入并生成 MyInput.cpp,该 MyInput.x 包括一个头文件 MyHeader.h。您可以指定 MyHeader.h 作为 MyInput.x 的输入依赖项,当该输入依赖项相对于 MyInput.x 或 MyHeader.h 过期时,生成系统将生成 MyInput.cpp。

      输入依赖项还可以确保自定义生成步骤按照所需顺序运行。在前面的示例中,假设 MyHeader.h 实际上是自定义生成步骤的输出。因为 MyHeader.h 是 MyInput.x 的一个依赖项,所以生成系统将首先生成 Myheader.h,然后再对 MyInput.x 运行自定义生成步骤。

    • 在“命令行”中,指定自定义生成规则的语法。此语法可以包括任何在命令行上或 .bat 文件中合法的命令。可能需要使用用于生成命令和属性的宏指定文件的位置,或者在多重选择的情况下获取输入文件的实际名称。批处理文件名的前面应带有 call,以确保后面的所有命令都被执行。

    • 在“说明”中,键入自定义生成步骤的说明。当生成系统处理此步骤时,将把该说明输出到“输出”窗口。

    • 在“输出”中,指定输出文件的名称。必须输入该名称;如果没有此属性的值,自定义生成步骤不会运行。如果自定义生成步骤有多个输出文件,则用分号将文件名分开。

      输出文件的名称应是在“命令行”属性中指定的名称。项目生成系统将查找该文件并检查其日期。如果该文件比输入文件新,或未找到该文件,则会运行自定义生成步骤。如果所有的“附加依赖项”文件的日期都早于输入文件的日期,而输入文件的日期早于**“输出”**文件的日期,则不会运行自定义生成步骤。

如果要让生成系统在自定义生成步骤生成的输出文件上操作,必须手动将它添加到项目中。自定义生成步骤将在生成期间更新该文件。

示例

假设您要在项目中包括一个名为 parser.l 的文件。您需要一个词法分析器处理 parser.l,以生成基本名称相同的 .c 文件 (parser.c)。

首先,将 parser.l 和 parser.c 添加到项目中。如果尚不存在这些文件,则只需添加对文件的引用。为 parser.l 创建自定义生成步骤,并在“命令”属性中键入以下命令:

lexer $(InputPath) .\$(InputName).c

此命令将对 parser.l 运行词法分析器,并将 parser.c 输出到项目目录中。

在“输出”属性中键入:

.\$(InputName).c

生成项目时,生成系统比较 parser.l 和 parser.c 的时间戳。如果 parser.l 较新,或如果 parser.c 不存在,则生成系统会运行“命令”属性以更新 parser.c。由于 parser.c 也添加到了项目中,因此生成系统将继续编译 parser.c。

请参见

参考

自定义生成步骤和生成事件疑难解答

其他资源

用于生成命令和属性的宏