scons on windows その6(独自Toolの定義)

カスタムのツールを定義するには、pythonスクリプトを所定の位置に置いてexistsとgenerateの2つの関数を定義すればいい。

$HOME/.scons/site_scons/site_tools/msvc10.py

import os

vs_path='C:\\Program Files (x86)\\Microsoft Visual Studio 10.0'
vc_path=vs_path+'\\VC'
sdk_path='C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1'

def exists(env):
    return os.path.exists(vs_path)

def generate(env):
    env['ENV']['PATH']=';'.join([
        vc_path+'\\BIN',
        vs_path+'\\Common7\\IDE',
        ])
    env['ENV']['INCLUDE']=';'.join([
        vc_path+'\\INCLUDE',
        sdk_path+'\\include',
        ])
    env['ENV']['LIB']=';'.join([
        vc_path+'\\LIB',
        sdk_path+'\\Lib',
        ])
    env.Tool('msvc')

環境変数を設定してから本家のmsvcを呼ぶ

$HOME/.scons/site_scons/site_tools/msvc10_64.py

import os

vs_path='C:\\Program Files (x86)\\Microsoft Visual Studio 10.0'
vc_path=vs_path+'\\VC'
sdk_path='C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1'

def exists(env):
    return os.path.exists(vs_path+'\\BIN\\x86_amd64')

def generate(env):
    env['ENV']['PATH']=';'.join([
        vc_path+'\\BIN\\x86_amd64', # 64bit
        vs_path+'\\Common7\\IDE',
        ])
    env['ENV']['INCLUDE']=';'.join([
        vc_path+'\\INCLUDE',
        sdk_path+'\\include',
        ])
    env['ENV']['LIB']=';'.join([
        vc_path+'\\LIB\\amd64', # 64bit
        sdk_path+'\\Lib\\x64', # 64bit
        ])
    env.Tool('msvc')

使い方
SConstruct

env=Environment(tools=['default', 'msvc10_64'])
env.SharedLibrary('zlib', Split('''
            adler32.c
            compress.c
            crc32.c
            deflate.c
            gzclose.c
            gzlib.c
            gzread.c
            gzwrite.c
            infback.c
            inffast.c
            inflate.c
            inftrees.c
            trees.c
            uncompr.c
            zutil.c
            '''))