/cpp_cmd switch
/cpp_cmd 开关指定 MIDL 编译器用于预处理输入文件的预处理器。
midl /cpp_cmd "C_preprocessor_binary"
-
C_preprocessor_binary
-
指定调用预处理器的命令。 此命令允许开发人员替代默认预处理器。 默认情况下,MIDL 从生成计算机的生成环境调用 Microsoft C/C++ 编译器。
开关 的C_preprocessor_binary 参数可以指定完整路径;exe 后缀和引号是可选的。 通常,开发人员使用 开关在生成环境中选择 Microsoft C/C++ 预处理器的特定版本或等效版本。 在这种情况下,无需将 /cpp_opt 开关与 /cpp_cmd 一起使用。
使用非 Microsoft 预处理器时,特别是当指定的预处理器不将其输出定向到 stdout 时,必须指定将输出重定向到 stdout 作为 MIDL 编译器 /cpp_opt 开关的一部分的 C 编译器开关。 有关详细信息,请参阅 MIDL 的 C 预处理器要求
预处理器由 /cpp_cmd、/cpp_opt、/D、/I 和 /U 开关根据提供给 MIDL 编译器的信息组成的命令字符串调用。 下表总结了如何为 /cpp_cmd 和 /cpp_opt 开关的每个组合构造命令字符串。
如果未指定 /cpp_cmd 开关,则 MIDL 编译器将调用 Microsoft C/C++ 编译器。 MIDL 使用在生成环境中找到的Cl.exe二进制文件。
当 /cpp_opt 开关不存在时,MIDL 编译器会将 /cpp_cmd 开关指定的字符串与 MIDL /I、 /D 和 /U 选项指定的信息连接在一起。 字符串 /E 还连接到 C 编译器调用字符串,以指示 C/C++ 编译器应仅执行预处理。 添加 /nologo 开关以禁止显示 C/C++ 编译器横幅。 MIDL 编译器使用串联的字符串为顶级 IDL 和导入的 IDL 文件以及任何存在的相应 ACF 文件调用 C 预处理器。
当 存在 /cpp_opt 开关(对于当前 32 位和 64 位平台来说,这种情况很少见)时,MIDL 编译器会将 /cpp_cmd 开关指定的字符串与 /cpp_opt 开关指定的字符串连接起来。 MIDL 编译器使用串联的字符串调用指示的预处理器二进制文件来代替默认预处理器。 如果 存在 /cpp_opt 开关,则 /I、 /D 和 /U 开关指定的 MIDL 编译器选项以及 C 编译器开关 /E 都不会与字符串连接。 必须提供 /E 选项或等效选项作为字符串的一部分。
/cpp_cmd存在? | /cpp_opt存在? | 说明 |
---|---|---|
否(默认值) | 否(默认值) | 使用从 MIDL /I、/D 和 /U 开关获取的设置调用默认 Microsoft C/C++ 编译器。 添加预处理器开关 /E 和 /nologo。 |
是 | 否 | 使用上述相同开关调用指示的预处理器二进制文件。 |
否 | 是 | 使用指定选项调用 Microsoft C 编译器。 不使用 MIDL /I、 /D、 /U 选项。 必须提供 /E 作为 /cpp_opt的一部分。 |
是 | 是 | 仅使用指定的选项调用指定的预处理器二进制文件。 必须使用引号。 |
midl /cpp_cmd d:\nt\tools\ia64\cl.exe /DFLAG=TRUE /Ic:\inc filename.idl
midl /cpp_cmd “mycpp” /DFLAG=TRUE /Ic:\inc filename.idl
midl /cpp_opt “/E /DFLAG=TRUE /Ic:\inc” filename.idl
midl /cpp_cmd “cl” /cpp_opt “/E /DFLAG=TRUE /Ic:\inc” filename.idl