Search code examples
c++visual-studio-2012scons

Using scons to compile C++ code under windows, scons adds "/Fo" as compile option


Using the following: Python version 2.7.13, Scons version 2.5.1, Visual Studio 2012 express is installed, but I am not planning to use it. Code blocks and MinGW-W64-builds-4.3 are installed.

Using Scons to compile C++ code (networkit toolkit) under windows. Scons adds "/Fo" as compile option. This option works only with VC++ and not with MinGW which I am trying to use. Why does Scons add this flag? I have checked my Sconstruct and the reference build.conf files and cannot seem to find this flag getting set explicitly.

My Sconstruct file is here(http://www103.zippyshare.com/v/jSrMapGz/file.html) and the build.conf file is here (http://www11.zippyshare.com/v/aXGQA5b5/file.html).

I want to get the compilation done with "-o" flag for g++, which is the equivalent of /Fo flag for VC++. I just cant figure out where Scons is picking this flag from :(

I am a novice with python and scons. I typically use VC++ 2012 but have to use networkit toolkit for a project, but it uses C11 features. And I cannot update to VC++ 2015/2017 yet.

Thanks for your help!


Solution

  • I checked your SConstruct file, and you are initialising your build environment as

    env = Environment()
    

    , which leaves the environment variable "tools" set to its standard value "default". The latter setting means: let SCons figure out which tools/compilers are installed in the current system, and add corresponding Builders to the build environment automatically. Under Windows, SCons will prefer "vc" over "mingw"...this is hardcoded at the moment (we're working on changing this for future versions of the core source).

    What you can do, since you know that you have a "mingw" compiler installed that you want to use explicitly, is to tell SCons that you want to work with "mingw" only. The following example from the page https://bitbucket.org/scons/scons/wiki/SconstructShortMingwWin32 shows the basic recipe for this:

    import os
        
    # Don't use the default environment
    DefaultEnvironment(tools=[])
    # Create an environment that uses mingw tools
    env = Environment(ENV=os.environ, tools=["mingw"])
        
    # The target will be myprogram.exe (in win32)
    # The source files will be every file in the current directory that matches "*.cpp"
    env.Program(target="myprogram", source = Glob("*.cpp"))
    

    For further help and as reference, please consider checking out our User Guide and Man page.