如何使用Embarcadero Make.exe使用响应文件

时间:2014-06-12 01:05:32

标签: c++builder command-line-tool

我正在通过C ++ Builder XE5的命令行工具构建项目,但是有太多的目标文件,因此输出为:

MAKE Version 5.4  Copyright (c) 1987, 2010 Embarcadero Technologies, Inc.
    ilink64 ...........

Fatal: Command arguments too long

如何解决这个问题?

(Meta说明:我即将回答我自己的问题,但由于官方文档不是很有启发性,所以我花了很多时间来解决这个问题所以我发布这个QA以防其他人遇到同样的问题)。

1 个答案:

答案 0 :(得分:0)

在makefile中创建和使用响应文件的示例语法:

myproject.dll: $(MANYOBJECTS)
    ilink64 $(LINKER_FLAGS) @&&.
$(MANYOBJECTS), myproject.dll, , import64 cw64mt
.

关键的想法是:

  • 紧跟&&之后的字符是要用作分隔符的字符,除了.之外的其他分隔符也是可能的
  • 两个.之间的文本被展开并放在一个临时文件中
  • 结束分隔符必须是其第一个字符
  • 临时文件名取代&&. ... .
  • 忽略同一行上的开始分隔符之后的任何内容
  • @表示ilink64会将临时文件的内容视为响应文件,而不是将其视为目标文件
  • ilink64实际上忽略了响应文件之后的任何内容,尽管在命令输出中正确显示(不知道原因;但这意味着您必须使响应文件包含命令的整个剩余部分)。

此示例生成的命令为:

MAKE Version 5.4  Copyright (c) 1987, 2010 Embarcadero Technologies, Inc.
    ilink64 -q -aa -Tpd -x -Gn c0x64 @MAKE0000.@@@

(注意:我的链接器标志可能不正确,这只是响应文件如何工作的演示)。