2009-08-12 41 views
2

我們在我們的項目中使用遞歸make。我們還使用帶有FlexLM許可證的商用嵌入式編譯器(diab)。使用make從許可證服務器借用編譯器許可證?

我們目前正在將許可借用添加爲每個目錄中頂級目標的依賴關係。

像這樣:

.PHONY: target 
target: borrow_compiler $(TARGETLIB) 
    $(RETURN_COMPILER) 

.PHONY : borrow_compiler 
borrow_compiler: 
    @$(BORROW_COMPILER) 300 

其中BORROW_COMPILERRETURN_COMPILER是腳本,獲得許可。

我們的問題是,由於與每個遞歸子目錄的許可證服務器進行通信,發生小的更改需要很長時間。

有沒有更好的方法來做到這一點?

+0

這並不容易,因爲只設置在目標文件的依賴性爲'borrow_compiler',因爲這會過早地返回許可證。 – 2009-08-12 09:39:04

回答

0

不是在makefile中做的,而是寫一個make程序包裝器,它首先借用許可證,然後用參數調用make,make返回後返回許可證?如果要強制使用make包裝器,可以在makefile中檢查是否設置了一些特殊的環境變量。

+0

但我想在不借用許可證的情況下運行make,然後只在需要編譯c/C++文件時才借用許可證。此外,在編譯所有c/C++文件之前,不應該返回許可證。 嗯..也許有可能檢測是否遞歸調用?那麼只有最上面的makefile應該做借用。 – 2009-08-12 13:53:32

+0

您也可以考慮不遞歸地運行make,請參閱「遞歸認爲有害」,http://miller.emu.id.au/pmiller/books/rmch/。 – hlovdal 2009-08-12 14:44:19

1

解決方案是看看MAKELEVEL。現在許可證只能在頂級製作中借用。這包括通過makefile文件的各個層面:

ifeq ($(MAKELEVEL),0) 
    BORROW_COMPILER = python $(relativeToolPath)scripts/borrowCompilerLicence.py 
    RETURN_COMPILER = python $(relativeToolPath)scripts/returnCompilerLicence.py 
else 
    # true does nothing 
    BORROW_COMPILER = true 
    RETURN_COMPILER = 
endif 
相關問題