2012-06-18 49 views
0

您可以在ASDF系統中設置:version屬性。有沒有辦法在運行時讀取它?像(system-version :my-system-name)獲取ASDF系統的版本

我知道有asdf:version-satisfiesasdf:asdf-version,但在這種情況下,我也不想做這件事。

+1

'(插槽值(ASDF:找到系統)「ASDF:版本)' –

+1

使用'插槽-value'是抽象破解,不像基於'component-version'的方法,所以後者更好。至少在理論上,有人可以寫一個不能訪問槽的'asdf:component-version'的方法,在這種情況下,直接檢查槽的代碼將會丟失。 –

回答

6

下面是代碼:

(defun system-version (system-designator) 
    (let ((system (asdf:find-system system-designator nil))) 
    (when (and system (slot-boundp system 'asdf:version)) 
     (asdf:component-version system)))) 

它的工作原理是這樣的:

CL-USER> (system-version :cffi) 
"0.10.7.1" 
CL-USER> (system-version :foo) 
NIL