我最近安装了mingw-w64,并试图使用SCons构建程序。下面是我一直试图使用的一个SConstruct文件的示例:
env = Environment(tools = ['mingw'])
env.Program('test.c')但是,我得到以下错误:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: warning: No version of Visual Studio compiler found - C/C++ compilers most likely not set correctly
File "C:\Python27\Scripts\scons.py", line 199, in <module>
gcc -o test.o -c test.c
'gcc' is not recognized as an internal or external command,
operable program or batch file.
scons: *** [test.o] Error 1
scons: building terminated because of errors.我已经正确设置了PATH变量,并且可以通过命令行使用gcc,所以SCons找不到它是很奇怪的。gcc的位置是C:\Program Files\mingw-w64\mingw64\bin。
我发现另一件奇怪的事情是必须指定工具。手册页上说,mingw是它的第二种偏好。我猜这和上面的问题有关。
发布于 2014-09-07 14:06:53
SCons常见问题 (在该项目的网站https://www.scons.org上找到)回答了这个被问得最多的问题,为什么SCons找不到我的编译器/链接器
您必须将shell路径传播到构建环境。默认情况下,SCons在没有任何设置的情况下创建干净的构建环境,这样就可以保证可重复构建。
如常见问题中所述,将以下内容添加到SConstruct中:
import os
env = Environment(tools = ['mingw'], ENV = {'PATH' : os.environ['PATH']})发布于 2017-10-27 20:46:35
Scons没有正确地检测到mingw-w64。
默认情况下,Scon将搜索多个编译器,直到找到一个。然而,对于mingw,它寻找一个名为mingw32-gcc的文件,它不适用于mingw-w64。
从源:https://bitbucket.org/scons/scons/raw/default/src/engine/SCons/Tool/mingw.py可以看出这一点。
# This is what we search for to find mingw:
key_program = 'mingw32-gcc'您可以通过在mingw32-gcc.exe的mingw 64\bin目录中创建一个符号链接,以指向gcc.exe (以管理员身份运行cmd.exe或mklink无法工作)来解决这个问题:
c:\...\mingw64\bin> mklink mingw32-gcc.exe gcc.exe您可以从dir命令验证符号链接:
10/27/2017 01:06 PM <SYMLINK> mingw32-gcc.exe [gcc.exe]有了这个,一个简单的SConstruct就可以工作了,假设您的路径中有mingw W64 gcc.exe:
d:\test>type SConstruct
Program('hello.c')
d:\test>scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o hello.o -c hello.c
gcc -o hello.exe hello.o
scons: done building targets.FYI,这是在Windows:.py上搜索工具的列表
def tool_list(platform, env):
...
if str(platform) == 'win32':
"prefer Microsoft tools on Windows"
linkers = ['mslink', 'gnulink', 'ilink', 'linkloc', 'ilink32' ]
c_compilers = ['msvc', 'mingw', 'gcc', 'intelc', 'icl', 'icc', 'cc', 'bcc32' ]
cxx_compilers = ['msvc', 'intelc', 'icc', 'g++', 'cxx', 'bcc32' ]
...发布于 2017-10-29 04:28:40
另外,scon手册有一个关于使用MINGW的片段:
MinGW MinGW bin目录必须位于PATH环境变量或construction变量下的PATH变量中,以便SCons检测和使用MinGW工具。当在本机WindowsPython解释器下运行时,无论路径变量中bin目录的顺序如何,SCons都会更喜欢MinGW工具而不是Cygwin工具。如果您同时安装了MSVC和MinGW,并且希望使用MinGW而不是MSVC,则必须通过传递显式地告诉SCons使用MinGW。 tools=' MinGW‘与Environment()函数相比,因为SCons更喜欢MSVC工具而不是MinGW工具
也就是说,在SCons默认的MINGW搜索路径中添加更多的默认位置也许是有意义的。
目前,它将检查Environment()的路径,然后查看c:\MinGW\bin
搜索“交友32-gcc”
但是对于mingw-w64,默认的二进制文件似乎是gcc.exe和/或x86_64-w64-mingw32-gcc.exe (或者i 686-W64-mingw32-gcc.exe)?
https://stackoverflow.com/questions/25710831
复制相似问题