I have a toolchain, not on the path, installed at a location containing spaces (C:\Program Files\Some Compiler\). I've tried:

env = Environment(
    MY_TOOLCHAIN_ROOT = R'C:\Program Files\Some Compiler\',
    MY_TOOLCHAIN_BIN = R'$MY_TOOLCHAIN_ROOT\bin',
)
env.Replace(
    CC = "$MY_TOOLCHAIN_BIN/gcc",
    CXX = "$MY_TOOLCHAIN_BIN/g++",
    OBJCOPY = "$MY_TOOLCHAIN_BIN/objcopy"
)

env.Program('main.cpp')

But I get the error

'C:\Program' is not recognized as an internal or external command, operable program or batch file.

How can I get scons to quote the spaces?

有帮助吗?

解决方案

Seems I need to mark them as Files:

env.Replace(
    CC = env.File("$MY_TOOLCHAIN_BIN/gcc"),
    CXX = env.File("$MY_TOOLCHAIN_BIN/g++"),
    OBJCOPY = env.File("$MY_TOOLCHAIN_BIN/objcopy")
)

其他提示

I think the problem is with the os style variables you are using with the $. Instead of specifying them with the env.File() (Im surprised it handled the variables), you could consider some simple python code as follows:

import os

env = Environment(
    MY_TOOLCHAIN_ROOT = R'C:\Program Files\Some Compiler\',
    MY_TOOLCHAIN_BIN = R'$MY_TOOLCHAIN_ROOT\bin',
)
env.Replace(
    CC = os.path.join(os.environ["MY_TOOLCHAIN_BIN"], "gcc"),
    CXX = os.path.join(os.environ["MY_TOOLCHAIN_BIN"], "g++"),
    OBJCOPY = os.path.join(os.environ["MY_TOOLCHAIN_BIN"], "objcopy")
)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top