我有一个现有的makefile项目,正在迁移到scons
。
makefile使用gcc
和g++
构建多个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
)?
答案 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'] = ['.']