如何在安装了 Visual Studio 的 Windows 上交叉编译 scons(使用 gcc)?

How do I cross-compile scons (with gcc) on Windows with Visual Studio installed?

我有一个现有的 makefile 项目,我正在将其迁移到 scons

makefile 使用 gccg++.

构建几个 Windows 可执行文件

但是,我还安装了 Visual Studio 用于 C# 开发。

看来 scons 正在尝试使用 Visual Studio 工具而不是 gcc 工具:

cl /Fofoo\bar.o /c foo\bar.c /nologo -g -mno-ms-bitfields -fshort-enums -ftest-coverage -fprofile-arcs /D-DUNIT_TESTS /I. <more includes follow...>
cl : Command line warning D9002 : ignoring unknown option '-g'

我已经阅读了几个答案并尝试添加:

env["CC"] = "gcc"
env["CXX"] = "g++"
env["LINK"] = "g++"

在我的 Sconstruct 文件中。这具有正确更改 工具 但不是命令语法的效果:

gcc /Fofoo\bar.o /c foo\bar.c /nologo -g -mno-ms-bitfields -fshort-enums -ftest-coverage -fprofile-arcs /D-DUNIT_TESTS /I. <more includes follow...>
gcc: error: /Fofoo\bar.o: No such file or directory

我如何确保 scons 使用我想要的工具并使用正确的命令行选项语法(例如 -I 而不是 /I)?

如果我不得不猜测你的 SConstruct 问题是这样的:

env=Environment()
env["CC"] = "gcc"
env["CXX"] = "g++"
env["LINK"] = "g++"
env['CCFLAGS']='-mno-ms-bitfields -fshort-enums -ftest-coverage -fprofile-arcs'
env['CPPDEFINES']=['-DUNIT_TESTS']
env['CPPPATH'] = ['.']

鉴于要在 Windows 上配置的默认工具列表按顺序排列如下,一旦找到其中之一,它将停止配置工具,然后设置适用于此类工具的标志.

c_compilers = ['msvc', 'mingw', 'gcc', 'intelc', 'icl', 'icc', 'cc', 'bcc32']

你需要明确列出你想要初始化的工具(并且不允许 SCons 添加默认工具)和它们所在的路径。另外你的 CPPDEFINES 应该是 ['UNIT_TESTS'] 和not ['-DUNIT_TESTS'] SCons 将添加适当的标志。请注意,如果您在构建中使用其他工具,则可能需要添加它们。

env=Environment(tools=[])
env.AppendENVPath('PATH', PATH_TO_YOUR_COMPILERS)
for tool in ['gcc','gnulink','ar']:
   env.Tool(tool)
env['CCFLAGS']='-mno-ms-bitfields -fshort-enums -ftest-coverage -fprofile-arcs'
env['CPPDEFINES']=['UNIT_TESTS']
env['CPPPATH'] = ['.']