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

时间:2019-06-24 10:29:42

标签: gcc g++ scons

我有一个现有的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文件中。这具有正确更改 tool 的效果,但不能正确更改命令语法:

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)?

1 个答案:

答案 0 :(得分:1)

如果我不得不猜测这个问题,那么您的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']而不是['- 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'] = ['.']