我正在通过C ++ Builder XE5的命令行工具构建项目,但是有太多的目标文件,因此输出为:
MAKE Version 5.4 Copyright (c) 1987, 2010 Embarcadero Technologies, Inc.
ilink64 ...........
Fatal: Command arguments too long
如何解决这个问题?
(Meta说明:我即将回答我自己的问题,但由于官方文档不是很有启发性,所以我花了很多时间来解决这个问题所以我发布这个QA以防其他人遇到同样的问题)。
答案 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.@@@
(注意:我的链接器标志可能不正确,这只是响应文件如何工作的演示)。