gpt4 book ai didi

python - 带有 MinGW 的 SCons 长命令行 TEMPFILE

转载 作者:太空狗 更新时间:2023-10-30 01:34:51 24 4
gpt4 key购买 nike

我正在尝试在 Windows 上使用 SCons 和 MinGW 从 gcc 和 gfortran 对象构建共享库,但在最终链接期间,命令行太长,超过 18000 个字符。我知道我需要使用临时文件(响应文件?)来传递命令行,但我找不到让 SCons 直接执行此操作的方法。我正在为这个库使用 CMake,它在没有我干预的情况下处理了响应文件。

SCons 似乎使用 CommandGeneratorAction 生成共享库命令行。有没有办法告诉这个 Action 使用响应文件机制?还有另一种方法可以处理我忽略的长命令行吗?

相关 SConscript:

sqllib = env.SharedLibrary(target='fvssql', source=sqllib_sources, LIBS=['odbc32',])
ffelib = env.SharedLibrary(target='fvspncffe', source=ffelib_sources, LIBS=[sqllib,], LIBPATH=['.',])

fvsobjs = env.SharedObject(fvslib_sources)
fvsobjs = [obj for obj in fvsobjs if obj.get_suffix()=='.o']

fvslib = env.SharedLibrary(target='fvspnc', source=fvsobjs, LIBS=sqllib+ffelib, LIBPATH=['.',])

env.Dump() 的相关输出:

'SHLIBSUFFIX': '.dll',
'SHLINK': '$LINK',
'SHLINKCOM': <SCons.Action.CommandGeneratorAction object at 0x02DDF770>,
'SHLINKFLAGS': ['$LINKFLAGS', '-shared'],

我可以在我的环境 env['SHLINKCOM']="${TEMPFILE('$SHLINK -o $TARGET ... $SOURCE')}" 中准备命令行模板,但是这看起来很脆弱,如果可能的话,我宁愿让 SCons 处理它。

我尝试使用字符串替换 env['SHLINKCOM']='${TEMPFILE("%s")}' % (env['SHLINKCOM'],),但结果是不完整的命令行和现在的响应文件。

编辑

我看到了 LongCmdLinesOnWin32解决方法。如果可能,我更愿意使用 TEMPFILE、TempFileMunge、命令行间接机制。

最佳答案

你见过http://scons.org/wiki/LongCmdLinesOnWin32吗? ?看起来在链接阶段对您的长命令问题有一个确切的答案。

关于python - 带有 MinGW 的 SCons 长命令行 TEMPFILE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com