#scons
#scons
Вопрос:
Есть кое-что, чего я не понимаю. Смотрите Следующий SConscript :
Import('common_env')
import os
#Grab a copy of the top environment (the one sent by the SConstruct file)
common_env = common_env.Clone()
#Because this component is compiled in both win32 and win64.
if (common_env['ENV']['CONFIG'] == "win32") or (common_env['ENV']['CONFIG'] == "win64"):
#Grabs the library name, the name should look like libpath_of_current_component-(debug/opt)
libName = common_env.libName()
common_env.USE_BOOST()
#Grab all the sources in current dir.
sources = Glob('*.cpp')
#Creates the library
myLib = common_env.Library(libName, sources)
#Install (copy) the library in LINK/lib/winX
common_env.Install('#/LINK/lib/' common_env['ENV']['CONFIG'], myLib)
Если этот скрипт вызывается из его вложенной папки, у меня есть следующий вывод :
scons: Entering directory `C:svnproductsfaa_mxscons-test-speed3'
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: builddebugsrspeechASRNetworkLayerThinProtocolwin64
cl /FobuilddebugsrspeechASRNetworkLayerThinProtocolwin64ThinProtocol.obj /c srspeechASRNetworkLayerThinProtocolThinProtocol.cpp /TP /nologo -Od -D_DEBUG -RTC1 -MDd -Z7 -DBOOST_FILESYSTEM_VERSION=2 -DWIN32 -D_WIN32 -DWINDOWS -D_MBCS -DNOMINMAX -D_MSC_VER=1600 -D_WIN32_WINNT=0x0501 -D_CRT_SECURE_NO_WARNINGS -W3 -nologo -GS -GR -EHa -wd4290 -wd4996 -wd4995 -TP -DBOOST_FILESYSTEM_VERSION=2 /Iinterfaceasomapi /Ifwksimulation_fwkutils /ILINKinclude /IbuilddebugsrspeechASRNetworkLayerThinProtocolwin64 /IsrspeechASRNetworkLayerThinProtocol /IC:svn3rdParty3rdPartyPackagesboost-1.47.0_vs2010_x64include /Z7
ThinProtocol.cpp
cl /FobuilddebugsrspeechASRNetworkLayerThinProtocolwin64ThinProtocolMessageDefinitions.obj /c srspeechASRNetworkLayerThinProtocolThinProtocolMessageDefinitions.cpp /TP /nologo -Od -D_DEBUG -RTC1 -MDd -Z7 -DBOOST_FILESYSTEM_VERSION=2 -DWIN32 -D_WIN32 -DWINDOWS -D_MBCS -DNOMINMAX -D_MSC_VER=1600 -D_WIN32_WINNT=0x0501 -D_CRT_SECURE_NO_WARNINGS -W3 -nologo -GS -GR -EHa -wd4290 -wd4996 -wd4995 -TP -DBOOST_FILESYSTEM_VERSION=2 /Iinterfaceasomapi /Ifwksimulation_fwkutils /ILINKinclude /IbuilddebugsrspeechASRNetworkLayerThinProtocolwin64 /IsrspeechASRNetworkLayerThinProtocol /IC:svn3rdParty3rdPartyPackagesboost-1.47.0_vs2010_x64include /Z7
ThinProtocolMessageDefinitions.cpp
cl /FobuilddebugsrspeechASRNetworkLayerThinProtocolwin64ThinProtocolMessaging.obj /c srspeechASRNetworkLayerThinProtocolThinProtocolMessaging.cpp /TP /nologo -Od -D_DEBUG -RTC1 -MDd -Z7 -DBOOST_FILESYSTEM_VERSION=2 -DWIN32 -D_WIN32 -DWINDOWS -D_MBCS -DNOMINMAX -D_MSC_VER=1600 -D_WIN32_WINNT=0x0501 -D_CRT_SECURE_NO_WARNINGS -W3 -nologo -GS -GR -EHa -wd4290 -wd4996 -wd4995 -TP -DBOOST_FILESYSTEM_VERSION=2 /Iinterfaceasomapi /Ifwksimulation_fwkutils /ILINKinclude /IbuilddebugsrspeechASRNetworkLayerThinProtocolwin64 /IsrspeechASRNetworkLayerThinProtocol /IC:svn3rdParty3rdPartyPackagesboost-1.47.0_vs2010_x64include /Z7
ThinProtocolMessaging.cpp
lib /nologo /OUT:builddebugsrspeechASRNetworkLayerThinProtocolwin64win64libsr_speech_ASRNetworkLayer_ThinProtocol-debug.lib builddebugsrspeechASRNetworkLayerThinProtocolwin64ThinProtocol.obj builddebugsrspeechASRNetworkLayerThinProtocolwin64ThinProtocolMessageDefinitions.obj builddebugsrspeechASRNetworkLayerThinProtocolwin64ThinProtocolMessaging.obj
scons: `srspeechASRNetworkLayerThinProtocol' is up to date.
scons: done building targets.
Как вы можете видеть, Install
scons вообще не вызывается.
Если вместо вызова scons -u
из вложенной папки я вызываю scons
из корня, тогда у меня есть это :
Install file: "builddebugsrspeechASRNetworkLayerThinProtocolwin64libsr_speech_ASRNetworkLayer_ThinProtocol-debug.lib" as "LINKlibwin64libsr_speech_ASRNetworkLayer_ThinProtocol-debug.lib"
Мой вопрос: почему эта разница? Это потому, что система сборки scons, в случае scons -u
, знает, что никому не нужен .lib, поэтому Install
не вызывается?
Спасибо!
Ответ №1:
По умолчанию набор файлов, которые будут созданы, находится в текущем рабочем каталоге вниз.
Вы можете увидеть информацию об этом на странице руководства: http://scons.org/doc/production/HTML/scons-man.html
Подмножество иерархического дерева можно построить, оставаясь в каталоге верхнего уровня (где находится файл SConstruct) и указав подкаталог в качестве целевого объекта для построения:
scons src/subdir
или путем изменения каталога и вызова scons с параметром -u, который
перемещается вверх по иерархии каталогов, пока не найдет
файл SConstruct, а затем создает целевые объекты относительно текущего подкаталога:cd src/subdir scons -u .
Смотрите также этот раздел:
-u, --up, --search-up
Перемещается вверх по структуре каталогов, пока не будет найден файл SConstruct , Sconstruct или sconstruct, и использует его в качестве вершины
дерева каталогов. Если в командной строке не указаны целевые объекты, будут созданы только целевые объекты в
текущем каталоге или ниже.-U
Работает точно так же, как и опция -u, за исключением способа обработки целей по умолчанию. Когда используется эта опция и
в командной строке не указаны целевые объекты, создаются все целевые объекты по умолчанию, которые
определены в SConscript (ах) в текущем каталоге,
независимо от того, в какой каталог попадают результирующие целевые объекты.
Таким образом, вы можете либо установить цель install по умолчанию (), либо указать ее как зависимость от какой-либо другой цели в текущем рабочем каталоге.