Si noti, tuttavia, che l'installazione di un file è ancora considerato un tipo del file "build". Questo è importante quando si ricorda che il comportamento predefinito di SCons è quello di creare file nella directory corrente o al di sotto di essa. Se, come nell'esempio sopra, si stanno installando file in una directory al di fuori della struttura di directory del file di livello superiore di SConstruct, è necessario specificare tale directory (o una directory superiore, ad esempio /) per l'installazione di c'è:
Cioè, è necessario richiamare SCons con la directory di installazione come un bersaglio (SP3_env['SP3_lib_dir']
nel tuo caso) in modo che l'installazione da eseguire. Per semplificare, utilizzare env.Alias()
come faccio di seguito.
Quando invochi SCons, dovresti almeno vedere che entrambe le librerie statiche e condivise sono incorporate nella directory del progetto locale. Immagino, tuttavia, che SCons non li installi. Ecco un esempio che ho fatto su Ubuntu che funziona:
env = Environment()
sourceFiles = 'ExampleClass.cc'
sharedLib = env.SharedLibrary(target='example', source=sourceFiles)
staticLib = env.StaticLibrary(target='example', source=sourceFiles)
# Notice that installDir is outside of the local project dir
installDir = '/home/notroot/projects/sandbox'
sharedInstall = env.Install(installDir, sharedLib)
staticInstall = env.Install(installDir, staticLib)
env.Alias('install', installDir)
Se eseguo scons senza obiettivi, ottengo il seguente:
# scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o ExampleClass.o -c ExampleClass.cc
g++ -o ExampleClass.os -c -fPIC ExampleClass.cc
ar rc libexample.a ExampleClass.o
ranlib libexample.a
g++ -o libexample.so -shared ExampleClass.os
scons: done building targets.
allora posso installare, eseguendo scons con l'obiettivo di installazione, come segue:
# scons install
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
Install file: "libexample.a" as "/home/notroot/projects/sandbox/libexample.a"
Install file: "libexample.so" as "/home/notroot/projects/sandbox/libexample.so"
scons: done building targets.
Oppure, si può solo fare tutto con un solo comando, prima tutto pulito
# scons -c install
Poi, fare tutto con un solo comando:
# scons install
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o ExampleClass.o -c ExampleClass.cc
g++ -o ExampleClass.os -c -fPIC ExampleClass.cc
ar rc libexample.a ExampleClass.o
ranlib libexample.a
g++ -o libexample.so -shared ExampleClass.os
Install file: "libexample.a" as "/home/notroot/projects/sandbox/libexample.a"
Install file: "libexample.so" as "/home/notroot/projects/sandbox/libexample.so"
scons: done building targets.