4

構築しているPythonモジュールのSConstructファイルがあります。

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

その結果、ライブラリと関連する.pyモジュールが./sandbox/usr/local/lib/python2.6/site-packagesにインストールされます。単に実行した場合:

#scons

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

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

4

1 に答える 1

4

したがって、多くのことを調べた後、これを行うための最良の方法は次のとおりであることがわかりました。

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は通常の「現在のディレクトリでのみビルドする」アプローチの外に強制されます。また、インストールの前にビルドが完了していることを確認し、以下を使用して便利なアンインストールを提供します。

#scons install --clean
于 2009-07-22T17:43:03.137 に答える