2012-05-04 41 views
2

我的構建中有一段源代碼是通過運行java類生成的。如何使生成的文件依賴於Scons中的java類

我不能爲我的生活制定出如何在依賴關係上指示scons,並且它在構建.class文件之前一直試圖構建源代碼。

當我做o = env.Java(target ='target_dir',source = Dir('source_dir'))時,o被設置爲一個空列表。

+0

你是如何執行的Java類?你使用Command()函數嗎?如果是這樣,我會在我的答案中增加另一個步驟。 – Brady

+0

我正在做它作爲一個單獨的步驟,然後在Command()函數中使用它作爲源 –

回答

2

您可以使用該Depends中()函數,是這樣的:

o = env.Java(target = 'target_dir', source = Dir('source_dir')) 
env.Depends(o, 'the_generated_file_and_path') 

這是一個更好的選擇(因爲你沒有打電話Depends中時擔心gen之類的文件路徑() ),假設你正在執行表示java類與SCons的命令()函數:

# $SOURCE and $TARGET will be filled in by SCons Command, $SOURCE is optional 
cmdLine = 'theCommand $SOURCE $TARGET' 

genTarget = env.Command(target = [list output files here], 
         source = 'java_class_executed', 
         action = cmdLine) 
... 
o = env.Java(...) 
env.Depends(o, genTarget) 

關於o是一個空列表,是它總是一個空列表?如果是這樣,小心你如何指定源代碼,它應該是包dir結構的根。例如,如果你的目錄樹是這樣的:

. 
|-- SConstruct 
`-- src 
    `-- com 
     `-- tanner 
      `-- application 
       `-- main.java 

如下您應指定源文件目錄:'#/src/com'

+0

它得到的'#'總是讓我。謝謝。 也不是爭論錯誤的方式嗎? –

+0

雅,這花了我一段時間去適應:) – Brady

+1

我認爲參數是在正確的順序,這是什麼文檔說:env.Depends(target,dependency) – Brady