我正在使用 jamplus 构建供应商的跨平台项目。在 osx 上,C 工具的命令行(通过 clang 提供给 ld)太长。
响应文件是对太长命令行的经典答案:jamplus 在手册中指出可以即时生成它们。
example in the manual看起来像这样:
actions response C++
{
$(C++) @@(-filelist @($(2)))
}
快到了!如果我专门吹出 C.Link 命令,如下所示:
actions response C.Link
{
"$(C.LINK)" $(LINKFLAGS) -o $(<[1]:C) -Wl,-filelist,@($(2:TC)) $(NEEDLIBS:TC) $(LINKLIBS:TC))
}
在我的 jamfile 中,我得到了传递到链接器所需的命令行,但响应文件没有换行符终止,因此链接失败(osx ld 需要换行符分隔的条目)。
- 有没有办法扩展与换行符连接的 jamplus 列表?我尝试使用连接扩展
$(LIST:TCJ=\n)
但没有成功。$(LIST:TCJ=@(\n))
也不起作用。如果我能做到这一点,生成的文件有望是正确的。 - 如果没有,我可以使用什么 jamplus 代码来覆盖 clang 的链接命令,并从列表中动态生成内容?我正在寻找侵入性最小的方法来处理这个问题 - 理想情况下,直接修改/覆盖该工具,而不是在需要链接的地方添加新的间接目标 - 因为它是我们供应商的代码库,所以需要尽可能少的编辑。<
最佳答案
您正在寻找的语法是:
newLine = "
" ;
actions response C.Link
{
"$(C.LINK)" $(LINKFLAGS) -o $(<[1]:C) -Wl,-filelist,@($(2:TCJ=$(newLine))) $(NEEDLIBS:TC) $(LINKLIBS:TC))
}
为了清楚起见(我不确定 StackOverflow 将如何格式化上述内容),应通过键入以下内容来定义 newLine 变量:
newLine = "" ;
然后将克拉放在两个引号之间并按 Enter 键。您可以对某些其他角色使用相同的技术,即
tab = " " ;
再次,从 newLine = ""开始,然后在引号之间放置克拉并点击 Tab。上面的内容实际上是 4 个空格,这是错误的,但希望您能明白这一点。另一个有用的功能是:
dollar = "$" ;
最后一个很有用,因为 $ 通常用于指定变量,因此当您实际想要指定美元文字时,拥有美元变量非常有用。就其值(value)而言,我正在使用的 Jambase(与我正在使用的 JamPlus 一起提供的 Jambase)具有以下功能:
SPACE = " " ;
TAB = " " ;
NEWLINE = "
" ;
第 28 行附近...
关于macos - 果酱 : link command line too long for osx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27995300/