SCons找不到mingw-w64编译器。

问题描述 投票:2回答:3

我最近安装了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.

另一个我觉得奇怪的地方是必须指定工具。man页面说mingw是它的第二偏好。我猜想这和上面的问题有关。

scons mingw-w64
3个回答
4
投票

这个 SCons FAQ (可在项目网站上找到) https:/www.scons.org)对这个最常见的问题有了答案。为什么SCons找不到我的编译器链接器??

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

如常见问题中所述,在你的SConstruct中添加以下内容。

import os
env = Environment(tools = ['mingw'], ENV = {'PATH' : os.environ['PATH']})

2
投票

Scons不能正确检测 mingw-w64.

默认情况下,Scons会搜索多个编译器,直到找到一个。然而,对于mingw来说,它会寻找一个叫做 mingw32-gcc,对mingw-w64不起作用。

这可以从源码中看到。https:/bitbucket.orgsconssconsrawdefaultsrcengineSConsToolmingw.py。

# This is what we search for to find mingw:
key_program = 'mingw32-gcc'

你可以通过在mingw-w64中创建一个符号链接来解决这个问题。mingw64bin 目录中的 mingw32-gcc.exe 指向 gcc.exe (以Administrator身份运行cmd.exe,否则mklink将无法工作)。

 c:\...\mingw64\bin> mklink mingw32-gcc.exe gcc.exe

你可以从 命令,有了这个命令,一个简单的SConstruct就可以了。

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.

顺便说一下,这是Scons在Windows上搜索的工具列表。https:/bitbucket.orgsconssconsrawdefaultsrcengineSConsTool__init__.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' ]
        ...

1
投票

另外,scons的manpage中有一段关于使用MINGW的片段。

MinGW

MinGW bin目录必须在您的PATH环境变量中,或者在ENV构造变量下的PATH变量中,SCons才能检测和使用MinGW工具。当在本地Windows Python解释器下运行时,如果两者都安装了,SCons将优先选择MinGW工具而不是Cygwin工具,不管PATH变量中bin目录的顺序如何。如果您同时安装了MSVC和MinGW,并且您想使用MinGW而不是MSVC,那么您必须通过传入

tools=['mingw']到Environment()函数中,因为SCons会更喜欢MSVC工具而不是MinGW工具。

也就是说,也许在SCons的MINGW默认搜索路径中添加更多的默认位置是有意义的。

目前它将检查环境()的PATH,然后查看c:\MinGW\bin

同时搜索 "mingw32-gcc"

但对于mingw-w64来说,默认的二进制文件似乎是gcc.exe和or x86_64-w64-mingw32-gcc.exe(或i686-w64-mingw32-gcc.exe)?

© www.soinside.com 2019 - 2024. All rights reserved.