2010-06-07 41 views
5

目前我正試圖將一個百萬個sloc遺留項目從沉悶的.cmd腳本移植到SCons。它的一部分是VC++,其他的是Delphi。爲C++創建SConscripts很簡單。如何強制SConscript構建器更改目錄?

要構建delphi部分,我寫了一個非常簡單的構建器,它可以檢測它是程序還是庫項目。在通過SConscript鏈接後調用構建器使得scons調用dcc32 $ subdir/project.dpr會誤導dcc32在當前目錄而不是$ subdir中查找單元。

有沒有辦法告訴scons在執行駐留在sconscript中的命令之前輸入$ subdir還是應該在構建器中修復它?

預先感謝您

回答

5

SCons的讀取時,他們已經變爲子目錄SConscripts的目錄,所以看起來問題將不得不被固定在實際建設者。

腳本解析後,SCons正在運行構建命令,它將停留在頂層目錄中。然後使用相對於該頂級目錄的路徑名稱發佈命令。更改此行爲的方法是在Builder中使用chdir關鍵字。

從scons的手冊頁的例子如下:

b = Builder(action='build < ${SOURCE.file} > ${TARGET.file}', 
      chdir=1) 
env = Environment(BUILDERS = {'MyBuild' : b}) 
env.MyBuild('sub/dir/foo.out', 'sub/dir/foo.in') 

你需要指定.file組件爲使用chdir不會改變傳遞給製造商的名稱,即他們仍然相對頂級目錄。

+0

這正是我所需要的組合。你的解決方案解決了我的問題非常感謝你! – Damg 2010-06-08 08:47:10

相關問題