2016-06-05 16 views
0

Der Einfachheit halber respektieren variant_dir, ich bin in der Lage, dieses Problem zu reproduzieren ich mit dem folgenden Beispiel habe ...scons nicht mit Objektdateien

ich zur Zeit zwei Dateien, eine SConstruct und ein SConscript.

Mein Verzeichnisbaum ist wie folgt:

- . 
    - SConstruct 
    - build (dir) 
    - dir1 (dir) 
     - mysrc.cpp 
     - proj (dir) 
      - SConscript 

Hier ist der Inhalt meiner SConstruct:

SConscript('dir1/proj/SConscript', variant_dir='build/out', duplicate=0) 

Hier ist der Inhalt von dir1/proj/SConscript:

src = Dir('.').srcnode().abspath + '/../mysrc.cpp' 
StaticLibrary('mylib', src) 

Wenn ich scons an meinem Stammverzeichnis ausführen, sehe ich die folgende Ausgabe

g++ -o dir1/mysrc.o -c dir1/mysrc.cpp 
ar rc build/out/libmylib.a 

Der ar Befehl sieht gut aus, gibt es an den variant_dir, die/aus ist zu bauen. Das Problem hier ist der Ausgabeort von mysrc.o. Es geht nach dir1 anstelle von build/out. Warum passiert das?

Antwort

1

Sie müssen Pfade zu Quelldateien angeben, so als ob sie sich im Verzeichnispfad befinden würden.

Ihre Top-Level ändern SConstruct dazu ...

SConscript('dir1/proj/SConscript', variant_dir='build/out', src_dir='dir1', duplicate=0) 

Und Ihre dir1/proj/SConscript Um dies ändern ...

src = Dir('.').srcnode().abspath + '/../../build/out/mysrc.cpp' 
StaticLibrary('mylib', src) 

Dann, wenn Sie ausführen, werden Sie die folgende sehen.

>> scons --version 
SCons by Steven Knight et al.: 
    script: v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[MODIFIED], 2015/07/31 14:36:10, by bdbaddog on hpmicrodog 
    engine: v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[MODIFIED], 2015/07/31 14:36:10, by bdbaddog on hpmicrodog 
    engine path: ['/usr/lib/scons/SCons'] 
Copyright (c) 2001 - 2015 The SCons Foundation 

>> tree 
. 
├── dir1 
│   ├── mysrc.cpp 
│   └── proj 
│    └── SConscript 
└── SConstruct 

2 directories, 3 files 

>> scons 
scons: Reading SConscript files ... 
scons: done reading SConscript files. 
scons: Building targets ... 
g++ -o build/out/mysrc.o -c dir1/mysrc.cpp 
ar rc build/out/proj/libmylib.a build/out/mysrc.o 
ranlib build/out/proj/libmylib.a 
scons: done building targets. 

>> tree 
. 
├── build 
│   └── out 
│    ├── mysrc.o 
│    └── proj 
│     └── libmylib.a 
├── dir1 
│   ├── mysrc.cpp 
│   └── proj 
│    └── SConscript 
└── SConstruct 

5 directories, 5 files