Как я могу кросс-компилировать scons (с gcc) в Windows с установленной Visual Studio? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть существующий проект make-файла, который я переношу на scons.

Makefile создает несколько исполняемых файлов Windows с gcc и g++.

Однако у меня также установлена ​​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)?

1 Ответ

1 голос
/ 24 июня 2019

Если я угадаю проблему, ваша 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'] = ['.']
...