2009-07-22 10 views
4

での作業私は建物だPythonモジュール用SConstructファイルがあります。sconsのは、(インストール)のみ--install-サンドボックス

import distutils.sysconfig 

env = Environment(CPPPATH=['include', distutils.sysconfig.get_python_inc()], 
        CPPFLAGS='-ggdb', SWIGFLAGS=['-python'], 
        SWIGPATH=['include']) 

env.ParseConfig('net-snmp-config --libs --cflags') 
env.Append(LIBS = 'pthread') 

backend_interface = 'src/backend_interface.c' 
backend_thread = 'src/backend_thread.c' 
python_wrapper = 'src/backend_thread.i' 


lib = env.SharedLibrary(target = "_rpdu_backend", 
         source = [ backend_interface, 
         backend_thread, python_wrapper ], 
         SHLIBPREFIX='') 

env.Install(distutils.sysconfig.get_python_lib(), 
      [ lib, 'src/rpdu_backend.py']) 

が稼働して:図書館で

$ scons --install-sandbox=./sandbox

結果をと./sandbox/usr/local/lib/python2.6/site-packagesにインストールされています。私は単純に実行する場合:rootとして

# scons

、何も/usr/local/lib/python2.6/site-packagesにインストールされていません。

なぜサンドボックスオプションなしでインストールターゲットを構築していないのですか?

答えて

4

だから、たくさんの周りを掘った後、それは次のようにこれを行うための最善の方法であることが判明:これが呼び出されたときに、「その通常の外SConsはを強制的に偽のターゲットを、設定し

import distutils.sysconfig 

env = Environment(CPPPATH=['include', distutils.sysconfig.get_python_inc()], 
        CPPFLAGS='-ggdb', SWIGFLAGS=['-python'], 
        SWIGPATH=['include']) 

env.ParseConfig('net-snmp-config --libs --cflags') 
env.Append(LIBS = 'pthread') 

backend_interface = 'src/backend_interface.c' 
backend_thread = 'src/backend_thread.c' 
python_wrapper = 'src/backend_thread.i' 


lib = env.SharedLibrary(target = "_rpdu_backend", 
         source = [ backend_interface, 
         backend_thread, python_wrapper ], 
         SHLIBPREFIX='') 
inst = env.Install(distutils.sysconfig.get_python_lib(), 
        [ lib, 'src/rpdu_backend.py']) 

env.Alias("install", inst) 
env.Depends(inst, lib) 
Ignore('.', inst) 

現在のディレクトリにのみ構築する "アプローチを採用しています。また、インストール前にビルドが完了していることを確認して、便利なアンインストールを提供します:

# scons install --clean
関連する問題