首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该什么时候使用scon扫描仪与parseDepends和依赖关系?

我应该什么时候使用scon扫描仪与parseDepends和依赖关系?
EN

Stack Overflow用户
提问于 2016-09-28 13:17:17
回答 2查看 439关注 0票数 1

我为这么长的问题道歉。

下面是我想用scon做的事情

  • 在语法文件组件(是语音识别项目)之前构建一个java组件。我的语法文件组件需要java组件来自己编译。
  • 使用多处理(-j)

到目前为止正在起作用的是:

  • 我们95%的c++代码都是用scon -j4完美构建的。正确地创建了Dependcies树
  • 我们的自定义python使用ant从java组件生成.jar。

不起作用的是:

  • 当使用-j4时,将在java编译之前调用定制的python,以从语法文件组件生成二进制文件。

下面是生成sideLibrary.jar的scon脚本文件(使用命令)

代码语言:javascript
复制
Import('common_env')
#Grab a copy of the top environment (the one sent by the SConstruct file)
common_env = common_env.Clone()
#Current working directory.
currentDir = common_env['ENV']['LOCALROOT'] + '/' + common_env.sconsGetCWD()
#Launches ant -q
tgts = common_env.Command(target = [currentDir + '/dist', currentDir + '/dialogeditor/lib', currentDir + '/doc/sdtk', currentDir + '/obj', common_env['ENV']['LOCALROOT'] + '/LINK/bin/win32/sideLibrary.jar'], source = 'build.xml', action = 'ant -q -f $SOURCE')
#Cleans the generated folders
common_env.Clean(tgts, '')

下面是用于生成语法二进制文件(使用自定义生成器)的scon脚本文件:

代码语言:javascript
复制
Import('common_env')
#Creates a copy of the build environment sent from the SConstruct file.
common_env = common_env.Clone()
#Because this component is only compiled in win32
if (common_env['ENV']['CONFIG'] == "win32"):
    #Language of the grammar.
    common_env['ENV']['LANGUAGE'] = 'en'
    #Language pack.
    common_env['ENV']['LANGUAGE_PACK'] = 'English.America.3.3.0'
    #Grammar name
    common_env['ENV']['GRAMMAR_NAME'] = 'faa'
    #Compiles the grammar using a custom builder.
    common_env.buildGrammar(src = common_env['ENV']['LOCALROOT'] + '/LINK/bin/win32/sideLibrary.jar')

有人告诉我,将src = calling _env‘env’+‘/LINK/bin/bin/bin 32/ sideLibrary.jar . our’传递给我们的定制构建器时,他告诉scon,在调用buildGrammar之前,他必须自动地从buildGrammar中等待。我真的很怀疑,因为文档只说:

源: Node对象的列表,表示此构建器函数用于构建目标的源。

这就引出了扫描仪ParseDepens取决于 (我已经阅读了关于它们的scon文档)。

在我的脑海中,还不清楚我应该使用哪个组件来完成我想要做的事情:在使用-j4的另一个组件之前强制编译java组件。

能给我点一下灯笼吗?

谢谢

编辑(添加依赖树)

代码语言:javascript
复制
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
copyAction(["LINK\bin\win32\msvcp100d.dll", "LINK\bin\win32\msvcr100d.dll", "LINK\bin\win32\mfc100d.dll", "LINK\bin\win32\mfc100ud.dll", "LINK\bin\win32\rdbgsetup_x86.exe"], ["C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcp100d.dll", "C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcr100d.dll", "C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100d.dll", "C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100ud.dll", "C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\RemoteDebugger\rdbgsetup_x86.exe"])
ant -q -f sr\side\build.xml
buildGrammar(["LINK\data\Grammars\src\grammars\AvailableCommand.xml", "sr\sra\src\grammars\en\faa\faa.autopron", "sr\sra\src\grammars\en\faa\faa.missing", "sr\sra\src\grammars\en\faa\faa.functions"], [])
+-.
  +-build
  | +-build\debug
  |   +-build\debug\sr
  |     +-build\debug\sr\side
  |     | +-build\debug\sr\side\win32
  |     |   +-sr\side\build.xml
  |     |   +-sr\side\side.sc
  |     +-build\debug\sr\sra
  |       +-build\debug\sr\sra\src
  |         +-build\debug\sr\sra\src\grammars
  |           +-build\debug\sr\sra\src\grammars\win32
  |             +-sr\sra\src\grammars\src_grammars.sc
  +-c
  +-cm
  | +-cm\sconsUtilities
  +-LINK
  | +-LINK\bin
  | | +-LINK\bin\win32
  | |   +-LINK\bin\win32\mfc100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcp100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcr100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100ud.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\RemoteDebugger\rdbgsetup_x86.exe
  | |   +-LINK\bin\win32\mfc100ud.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcp100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcr100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100ud.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\RemoteDebugger\rdbgsetup_x86.exe
  | |   +-LINK\bin\win32\msvcp100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcp100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcr100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100ud.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\RemoteDebugger\rdbgsetup_x86.exe
  | |   +-LINK\bin\win32\msvcr100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcp100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcr100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100ud.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\RemoteDebugger\rdbgsetup_x86.exe
  | |   +-LINK\bin\win32\rdbgsetup_x86.exe
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcp100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugCRT\msvcr100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100d.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC100.DebugMFC\mfc100ud.dll
  | |   | +-C:\svn\3rdParty\devTool\Microsoft_Visual_Studio_10.0\RemoteDebugger\rdbgsetup_x86.exe
  | |   +-LINK\bin\win32\sideLibrary.jar
  | |     +-sr\side\build.xml
  | |     +-C:\svn\3rdParty\devTool\apache-ant-1.9.2\bin\ant.BAT
  | +-LINK\data
  |   +-LINK\data\Grammars
  |     +-LINK\data\Grammars\src
  |       +-LINK\data\Grammars\src\grammars
  |         +-LINK\data\Grammars\src\grammars\AvailableCommand.xml
  +-SConstruct
  +-sr
    +-sr\side
    | +-sr\side\build.xml
    | +-sr\side\dialogeditor
    | | +-sr\side\dialogeditor\lib
    | |   +-sr\side\build.xml
    | |   +-C:\svn\3rdParty\devTool\apache-ant-1.9.2\bin\ant.BAT
    | +-sr\side\dist
    | | +-sr\side\build.xml
    | | +-C:\svn\3rdParty\devTool\apache-ant-1.9.2\bin\ant.BAT
    | +-sr\side\doc
    | | +-sr\side\doc\sdtk
    | |   +-sr\side\build.xml
    | |   +-C:\svn\3rdParty\devTool\apache-ant-1.9.2\bin\ant.BAT
    | +-sr\side\obj
    | | +-sr\side\build.xml
    | | +-C:\svn\3rdParty\devTool\apache-ant-1.9.2\bin\ant.BAT
    | +-sr\side\side.sc
    +-sr\sra
      +-sr\sra\src
        +-sr\sra\src\grammars
          +-sr\sra\src\grammars\en
          | +-sr\sra\src\grammars\en\faa
          |   +-sr\sra\src\grammars\en\faa\faa.autopron
          |   +-sr\sra\src\grammars\en\faa\faa.functions
          |   +-sr\sra\src\grammars\en\faa\faa.missing
          +-sr\sra\src\grammars\src_grammars.sc
scons: done building targets.

编辑2添加了buildGrammar

代码语言:javascript
复制
def buildGrammar(target, source, env):
    LANGUAGE = env['ENV']['LANGUAGE']
    LANGUAGE_PACK = env['ENV']['LANGUAGE_PACK']
    GRAMMAR_NAME = env['ENV']['GRAMMAR_NAME']
    LINKD = env['ENV']['LINKD']
    SIDE_BINARY_DIR = LINKD + '/bin/win32'
    DATAPACK_OUT_UDIR = DATAPACK_OUT_DIR = LINKD
    GRAMMAR_SRC_DIR = env['ENV']['LOCALROOT'] + '/sr/sra/src/grammars/' + LANGUAGE + '/' + GRAMMAR_NAME
    GRAMMAR_SRC_FILES = glob.glob(GRAMMAR_SRC_DIR + '/*.grammar') + glob.glob(GRAMMAR_SRC_DIR + '/*.dictionary')
    CUSTOM_NL_FUNCTIONS_FILE = GRAMMAR_SRC_DIR + '/' + GRAMMAR_NAME + '.functions'
    PBS_FILE = env['ENV']['LOCALROOT'] + '/fwk/systemInterface/simnet/src/pbs_api.h'
    SIDE_LIBRARY_PATH = SIDE_BINARY_DIR + '/sideLibrary.jar'
    SRROOT = env['ENV']['LOCALROOT'] + '/sr'
    GRM_PROJECT = 'faa'
    UTIL_DIR = env['ENV']['LOCALROOT'] + '/sr/sra/utils/build'
    #CUSTOM_NL_FUNCTIONS_FILE
    print "(+) Generating " + CUSTOM_NL_FUNCTIONS_FILE
    customNlFunctionsFile = open(CUSTOM_NL_FUNCTIONS_FILE, "w")
    call("perl " + UTIL_DIR + '/header2Nuance ' + PBS_FILE, stdout = customNlFunctionsFile) 
    customNlFunctionsFile.close()
    print "Done."
    #dataPackBuild
    print "(+) Building lexix datapack... (no find and no chmod) - Grammar"
    if os.path.exists(DATAPACK_OUT_UDIR + '/data/Grammars/abnf/bin/' + GRAMMAR_NAME):
        shutil.rmtree(DATAPACK_OUT_UDIR + '/data/Grammars/abnf/bin/' + GRAMMAR_NAME)
    if os.path.exists(DATAPACK_OUT_UDIR + '/data/SOURCES'):
        shutil.rmtree(DATAPACK_OUT_UDIR + '/data/SOURCES')
    linkToWD = env['ENV']['LOCALROOT'] + '/sr/sra/src/grammars'
    os.chdir(linkToWD)
    call('java -jar ' + SIDE_LIBRARY_PATH + ' --verbyx -l ' + SIDE_BINARY_DIR + '/plugin.properties ' + '--deploy . ' + DATAPACK_OUT_DIR + ' > /dev/nul')
    if not os.path.exists(DATAPACK_OUT_UDIR + '/data/Grammars/src/grammars/en/faa'):
        os.makedirs(DATAPACK_OUT_UDIR + '/data/Grammars/src/grammars/en/faa')
    for file in GRAMMAR_SRC_FILES:
        shutil.copy(file, DATAPACK_OUT_UDIR + '/data/Grammars/src/grammars/en/faa')
    for file in glob.glob('*.xml'):
        shutil.copy(file, DATAPACK_OUT_UDIR + '/data/Grammars/src/grammars')
    shutil.copy('.project', DATAPACK_OUT_UDIR + '/data/Grammars/src/grammars')
    copytree('./project', DATAPACK_OUT_UDIR + '/data/Grammars/src/grammars/project')
    copytree('./.settings', DATAPACK_OUT_UDIR + '/data/Grammars/src/grammars/.settings')
    os.chdir(env['ENV']['LOCALROOT'])
    print "Done."

    #grammar.mk
    DATA_DIR = env['ENV']['LOCALROOT'] + '/LINK/data'
    GRAMMAR_SRC_DIR = SRROOT + '/sra/src/grammars'
    GRAMMAR_PROJECT_SRC_DIR = GRAMMAR_SRC_DIR + '/en/' + GRM_PROJECT
    GRAMMAR_OBJ_DIR = DATA_DIR + '/Grammars/bin'
    OUTPUT_DIR = GRAMMAR_OBJ_DIR + '/' + LANGUAGE + '/' + GRM_PROJECT
    AD_HOME = 'C:/Adacel/temp'
    PROJECT_DICTIONARY = DATA_DIR + '/Grammars/bin/dictionary'
    PROJECT_SRC_DICTIONARY = GRM_PROJECT + '.dictionary'
    PROJECT_OUT_DICTIONARY = OVERRIDE_OUT_DICTIONARY = PROJECT_DICTIONARY + '/' + LANGUAGE_PACK
    PROJECT_OUT_DIST_DICTIONARY = OVERRIDE_OUT_DIST_DICTIONARY = AD_HOME + '/nuance/dictionary/' + LANGUAGE_PACK
    PROJECT_SRC_OVR_DICTIONARY = OVR_DICTIONARY = 'override.dictionary'
    GRAMMAR_MASTER_FILE = GRM_PROJECT + '.grammar'
    COMPILE_FLAGS = LANGUAGE_PACK + ' -auto_pron -optimize_graph -dont_flatten -node_array_optimization_level FULL -override_dictionary ' + OVERRIDE_OUT_DIST_DICTIONARY + '/' + OVR_DICTIONARY + ' -merge_dictionary ' + PROJECT_OUT_DIST_DICTIONARY + '/' + PROJECT_SRC_DICTIONARY
    print "(+) Merging " + PROJECT_OUT_DICTIONARY + " and " + PROJECT_OUT_DIST_DICTIONARY
    if not os.path.exists(PROJECT_OUT_DICTIONARY):
        os.makedirs(PROJECT_OUT_DICTIONARY)
    shutil.copy(SRROOT + '/sra/src/grammars/' + LANGUAGE + '/' + GRM_PROJECT + '/' + PROJECT_SRC_DICTIONARY, PROJECT_OUT_DICTIONARY)
    if not os.path.exists(PROJECT_OUT_DIST_DICTIONARY):
        os.makedirs(PROJECT_OUT_DIST_DICTIONARY)
    shutil.copy(SRROOT + '/sra/src/grammars/' + LANGUAGE + '/' + GRM_PROJECT + '/' + PROJECT_SRC_DICTIONARY, PROJECT_OUT_DIST_DICTIONARY)
    print "Done."
    print "Copying " + OVERRIDE_OUT_DICTIONARY + " and " + OVERRIDE_OUT_DIST_DICTIONARY
    if not os.path.exists(OVERRIDE_OUT_DICTIONARY):
        os.makedirs(OVERRIDE_OUT_DICTIONARY)
    shutil.copy(SRROOT + '/sra/src/grammars/' + LANGUAGE + '/' + GRM_PROJECT + '/' + PROJECT_SRC_OVR_DICTIONARY, PROJECT_OUT_DICTIONARY)
    if not os.path.exists(OVERRIDE_OUT_DIST_DICTIONARY):
        os.makedirs(OVERRIDE_OUT_DIST_DICTIONARY)
    shutil.copy(SRROOT + '/sra/src/grammars/' + LANGUAGE + '/' + GRM_PROJECT + '/' + PROJECT_SRC_OVR_DICTIONARY, OVERRIDE_OUT_DIST_DICTIONARY)
    print "Done."
    NUANCE_COMPILER = env['ENV']['NUANCE_ROOT'] + '/bin/win32/nuance-compile '
    #Compiles Grammar.
    if not os.path.exists(OUTPUT_DIR + '/' + LANGUAGE_PACK):
        os.makedirs(OUTPUT_DIR + '/' + LANGUAGE_PACK)
    print "(+) Building " + LANGUAGE + "." + GRM_PROJECT + "." + LANGUAGE_PACK + " grammar..."
    os.chdir(env['ENV']['LOCALROOT'] + '/sr/sra/src/grammars/' + LANGUAGE + '/' + GRM_PROJECT)
    compilationCmd = NUANCE_COMPILER + GRAMMAR_MASTER_FILE + ' ' + COMPILE_FLAGS + ' -o ' + OUTPUT_DIR + '/' + LANGUAGE_PACK + ' -write_auto_pron_output ' + OUTPUT_DIR + '/' + LANGUAGE_PACK + '/.missing'
    call(compilationCmd)
    os.chdir(env['ENV']['LOCALROOT'])
    print "Done."

    #Grammar-database.mk
    print "(+) Creating dynamic grammar database (" + LANGUAGE + ")..."
    GRAMMAR_DIR = env['ENV']['LOCALROOT'] + '/LINK/data/Grammars/bin'
    GRAMMAR_DATABASE_DIR = GRAMMAR_DIR + '/' + LANGUAGE + '/dgdb-common'
    if os.path.exists(GRAMMAR_DATABASE_DIR):
        shutil.rmtree(GRAMMAR_DATABASE_DIR)
    if not os.path.exists(GRAMMAR_DIR + '/' + LANGUAGE):
        os.makedirs(GRAMMAR_DIR + '/' + LANGUAGE)
    NUANCE_DATABASE = env['ENV']['NUANCE_ROOT'] + '/bin/win32/nuance-database-admin '
    DB_FLAGS = '-dboperation create -dbname common -dbprovider fs -dbclass dgdb -dbroot ' + GRAMMAR_DIR + '/' + LANGUAGE
    call(NUANCE_DATABASE + DB_FLAGS)
    print "Done."
    return None
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-04 01:09:08

嗯,我不确定这个问题能帮到谁,但我觉得至少回答我的问题很重要。

因此,对于以scon开头的每个人,始终使用"source=“作为函数参数。我的所有问题(-j4不起作用)都与以下事实完全相关:当我调用自定义构建器时,我使用它的方式是"buildGrammar(src="blabla")“。这是错误的。必须是"buildGrammar(source="blabla")

票数 0
EN

Stack Overflow用户

发布于 2016-09-28 15:20:21

您可能不需要ScannerParseDependsDepends。请看一下我们的ToolsForFools指南,看看如何为您的生成器提供一个Emitter

SCons需要知道的是,文件sideLibrary.jar是由系统中的另一个生成器创建的(整个构建描述)。如果您已经显式地将sideLibrary.jar指定为creating的目标,那么这应该是现成的。然后,SCons知道sideLibrary.jar既是一个生成器的目标,也是另一个生成器的源文件。所以它可以正确地安排单个构建步骤..。

但是,如果您的sideLibrary.jar只是另一个构建命令的副产品:

代码语言:javascript
复制
env.YourBuilder('other.jar', Glob('*.java'))

,然后您需要为这种类型的构建定义一个特殊的发射器,这样SCons就可以同时看到构建other.jar和创建sideLibrary.jar之间的联系。

我希望这能让你更清楚。如果您仍然很难让它正常工作,请查看我们的UserMailing列表(scons-users@scons.org,也请参阅http://scons.org/lists.html),在这里我们可以更详细地讨论您的问题,您可能会获得更多有用的参考指针。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39748707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档