Scons PreAction命令已打印,但显然未执行

问题描述 投票:0回答:1

我正在用SCONS构建一个大型项目,出于这个主题(大故事)的原因,我需要在文件内的最终链接命令中传递目标文件选项。例如:

gcc -o program.elf @ objects_file.txt -T linker_file.ld

此命令有效,因为我已经手动对其进行了测试。但是现在我需要将其嵌入Project构建文件中运行。我的第一个方法/想法是通过以下方式将所有选项收集到文件中:

dbg_exe     = own_env.Program('../' + target_path, components)
own_env.AddPreAction(dbg_exe, 'echo \'$SOURCES\' > objects_file.txt')

注意:$ sources包含我需要的所有目标文件。正如我期望的那样,该命令似乎已执行,我在终端中看到了该命令,但由于某种原因,由于未在任何地方找到objects_file.txt,所以该命令尚未执行。

很好奇,如果我将打印的行复制并粘贴到同一终端中,命令执行成功,那么我认为构造的语法是正确的。

我也尝试了较短的测试代码:

own_env.AddPreAction(dbg_exe, 'ls -l > salida_ls.txt')

...还有另一个惊喜,这次我在控制台中收到语法错误:

scons: done reading SConscript files.
scons: Building targets ...
ls -l > salida_ls.txt
ls: cannot access '>': No such file or directory
ls: cannot access 'salida_ls.txt': No such file or directory

简单的'ls -l'效果很好。

任何想法为何这种bash命令无法按预期工作? >

重定向符号是否影响SCONS?

一些也许有用的信息:

OS Windows10

终端mingw32

SCons v2.3.1

经过搜索,我发现这与SPAWN构造变量的重新定义有关:

def w32api_spawn(sh, escape, cmd, args, e_env):

    print "CMD value" 
    print sh 
    print escape 
    print cmd
    print args
    print e_env
    print " ********************************** " 
    if cmd == "SHELL":
        return SCons.Platform.win32.spawn(sh,escape,args[1], args[1:],e_env)
    cmdline = cmd + ' ' + string.join(args[1:], ' ')
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW

    proc = subprocess.Popen(
        cmdline, 
        stdin=subprocess.PIPE, 
        stdout=subprocess.PIPE, 
        stderr=subprocess.STDOUT, 
        startupinfo=startupinfo, 
        shell = False, 
        env = None
        )

    data, err = proc.communicate()

    print data
    rv = proc.wait()
    if rv:
        print "====="
        print err
        print "====="
    return rv

我正在用SCONS构建一个大型项目,出于这个主题(大故事)的原因,我需要在文件内的最终链接命令中传递目标文件选项。例如:gcc -o program.elf @ ...

scons
1个回答
0
投票

看起来您需要交换回该Program()的默认SPAWN。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.