2009-07-22 15 views
4

J'ai un fichier SConstruct pour un module python Je construis:Scons install() ne travaillant qu'avec --install-bac à sable

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']) 

Course à pied:

$ scons --install-sandbox=./sandbox

résultats dans la bibliothèque et Le module .py associé est installé dans ./sandbox/usr/local/lib/python2.6/site-packages. Si je lance simplement:

# scons

en tant que root, rien est installé à /usr/local/lib/python2.6/site-packages.

Pourquoi les scons ne construisent-ils pas la cible d'installation sans l'option bac à sable?

Répondre

4

Alors après avoir creusé autour d'un lot, il se trouve que la meilleure façon de le faire est la suivante:

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) 

Ceci met en place une cible de faux, qui, lorsqu'il est appelé, force SCons en dehors de son habituel " construire uniquement dans l'approche "répertoire courant". Il s'assure également que la construction est terminée avant l'installation et fournit une désinstallation pratique en utilisant:

# scons install --clean