gpt4 book ai didi

Scons Install() 仅适用于 --install-sandbox

转载 作者:行者123 更新时间:2023-12-02 07:57:10 34 4
gpt4 key购买 nike

我有一个用于我正在构建的 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 不构建没有沙箱选项的安装目标?

最佳答案

经过大量研究后,发现最好的方法如下:

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

关于Scons Install() 仅适用于 --install-sandbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1166103/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com