首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCons无法找到mingw-w64编译器。

SCons无法找到mingw-w64编译器。
EN

Stack Overflow用户
提问于 2014-09-07 13:43:23
回答 3查看 2.9K关注 0票数 2

我最近安装了mingw-w64,并试图使用SCons构建程序。下面是我一直试图使用的一个SConstruct文件的示例:

代码语言:javascript
复制
env = Environment(tools = ['mingw'])
env.Program('test.c')

但是,我得到以下错误:

代码语言:javascript
复制
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是它的第二种偏好。我猜这和上面的问题有关。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-07 14:06:53

SCons常见问题 (在该项目的网站https://www.scons.org上找到)回答了这个被问得最多的问题,为什么SCons找不到我的编译器/链接器

您必须将shell路径传播到构建环境。默认情况下,SCons在没有任何设置的情况下创建干净的构建环境,这样就可以保证可重复构建。

如常见问题中所述,将以下内容添加到SConstruct中:

代码语言:javascript
复制
import os
env = Environment(tools = ['mingw'], ENV = {'PATH' : os.environ['PATH']})
票数 5
EN

Stack Overflow用户

发布于 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可以看出这一点。

代码语言:javascript
复制
# This is what we search for to find mingw:
key_program = 'mingw32-gcc'

您可以通过在mingw32-gcc.exemingw 64\bin目录中创建一个符号链接,以指向gcc.exe (以管理员身份运行cmd.exe或mklink无法工作)来解决这个问题:

代码语言:javascript
复制
 c:\...\mingw64\bin> mklink mingw32-gcc.exe gcc.exe

您可以从dir命令验证符号链接:

代码语言:javascript
复制
10/27/2017  01:06 PM    <SYMLINK>      mingw32-gcc.exe [gcc.exe]

有了这个,一个简单的SConstruct就可以工作了,假设您的路径中有mingw W64 gcc.exe:

代码语言:javascript
复制
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上搜索工具的列表

代码语言:javascript
复制
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' ]
        ...
票数 2
EN

Stack Overflow用户

发布于 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)?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25710831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档