【问题标题】:Scons Install() only working with --install-sandboxScons Install() 仅适用于 --install-sandbox
【发布时间】:2009-07-22 15:27:52
【问题描述】:

我有一个我正在构建的 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

作为 root,没有任何东西安装到 /usr/local/lib/python2.6/site-packages。

为什么没有沙盒选项 scons 不构建安装目标?

【问题讨论】:

    标签: scons


    【解决方案1】:

    所以在挖掘了很多之后,事实证明最好的方法如下:

    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

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      相关资源
      最近更新 更多