2012-07-26 28 views
0

我需要編輯由boost-build用於特定類型項目的.jam文件。上的bjam語言官方手冊上說:Boost-build/BJam語言 - 檢查標誌的值

  1. 一說關心DEF文件的工具集是MSVC。以下行應添加到它。標誌msvc.link DEF_FILE ;由於DEF_FILE變量沒有被msvc.link動作使用,我們需要修改它爲:actions link bind DEF_FILE {$(。LD).... /DEF:$(DEF_FILE)... 。}注意綁定DEF_FILE部分。它講述的bjam到 在DEF_FILE到相應的文件名 在鏈接

因此,與ECHO顯然是剛剛打印DEF_FILE是行不通的翻譯內部目標的名稱。它如何擴展到一個字符串變量或者其他可以被實際檢查的東西?

我需要做的是打印一個錯誤消息,並在標誌沒有設置的情況下中止生成。我想:

if ! $(DEF_FILE) 
{ 
    errors.user-error "file not found" ; 
    EXIT ; 
} 

但這個「如果」始終是真實的

我也試圖把「如果$ _DEF_FILE {...}!」內含的「行動」,但顯然它被忽略。

回答

1

我不確定我是否理解您擁有的全球任務。但是,如果您想添加對非空DEF_FILE的檢查 - 擴展您引用的文檔位,則需要在msvc.link函數中添加檢查。

如果您有一個命令行模式(由'actions'指定),它的內容是傳遞給OS執行的內容。但是,您也可以使用具有相同名稱的函數,該函數將在生成操作之前調用。例如,這裏就是當前的代碼庫有:

rule link.dll (targets + : sources * : properties *) 
{ 
    DEPENDS $(<) : [ on $(<) return $(DEF_FILE) ] ; 
    if <embed-manifest>on in $(properties) 
    { 
     msvc.manifest.dll $(targets) : $(sources) : $(properties) ; 
    } 
} 

可以額外修改此代碼:

if ! [ on $(<) return $(DEF_FILE) ] { 
     ECHO "error" ; 
}