這是我的簡單情況。我有一個源文件結構如下:編譯時,Scons VariantDir()複製了CPPPATH和LIBPATH?
.
├── SConstruct
└── src
├── SConscript
├── staticLib
│ ├── classInStaticLib.cpp
│ ├── classInStaticLib.h
│ └── SConscript
└── test.cpp
SConstruct:
VariantDir('build', 'src', duplicate=0)
SConscript('build/SConscript')
的src/SConscript:
import os
lib = 'staticLib'
SConscript(os.path.join(lib, 'SConscript'))
Program('test',
'test.cpp',
CPPPATH = lib,
LIBS = lib,
LIBPATH = lib)
的src/staticLib/SConscript:
Library('staticLib', 'classInStaticLib.cpp')
後我運行scons,我得到了followin g殼:
g++ -o build/staticLib/classInStaticLib.o -c src/staticLib/classInStaticLib.cpp
ar rc build/staticLib/libstaticLib.a build/staticLib/classInStaticLib.o
ranlib build/staticLib/libstaticLib.a
g++ -o build/test.o -c -Ibuild/staticLib -Isrc/staticLib src/test.cpp
g++ -o build/test build/test.o -Lbuild/staticLib -Lsrc/staticLib -lstaticLib
scons完成沒有錯誤。但請注意,第4行中同時存在「-Ibuild/staticLib」和「-Isrc/staticLib」,第5行中同時存在「-Lbuild/staticLib」和「-Lsrc/staticLib」。應該只有一個。
爲什麼會發生這種情況?
我剛剛在SCons-users郵件列表上問這個問題,看看它是一個錯誤還是有意的行爲。見http://four.pairlist.net/pipermail/scons-users/2014-April/002438.html – jfritz42