2014-12-24 71 views
0

我試圖寫一個FindQwt.cmake模塊。我搜索了現有的模塊,並沒有爲我的安裝工作。cmake find_path其中路徑包含版本號

我模塊的查找路徑呼叫目前看起來是這樣的:

find_path (QWT_INCLUDE_DIR 
     NAMES qwt_global.h 
     HINTS ${QT_INCLUDE_DIR} 
     PATHS 
     /opt 
     /usr/include 
     /usr/local 
     /usr/local/include 
     "$ENV{LIB_DIR}/include" 
     "$ENV{INCLUDE}" 
     PATH_SUFFIXES qwt 
    ) 

實際qwt_global.h文件駐留在路徑:/opt/qwt-6.1.2/src/qwt_global.h

我可以如果我添加路徑後綴qwt-6.1.2/src,則可以讓它起作用,但在我看來,如果我需要對每個版本進行硬編碼,它將會失去找到模塊的目的(假設我稍後在模塊中檢查版本是兼容的,不關心在兼容集合內使用哪個版本)。我試過和qwt*/src PATH_SUFFIXES,但無濟於事。

這似乎是一個常見問題。有誰知道如何解決這個find_path調用對路徑中的版本號碼的魯棒性?

編輯:我使用cmake 3.0.2

+0

不知道cmake,但找到版本號的適當位置是qwtconfig.pri - 而不是qwtglobal.h。至少你處於cmake vs. qmake的更一般情況。 另外一個/opt/qwt-6.1.2/src的路徑表明你跳過了「make install」步驟,這不是一個好主意。 – Uwe

+0

感謝您的建議。不幸的是,我的發行版安裝在只讀文件系統上,/ opt是我可以訪問的少數幾個地方之一。 –

+0

跳過「make install」步驟沒有任何參數。編輯qwtconfig.pri並將安裝路徑設置爲/ opt中的某些內容。 – Uwe

回答

1

您可以使用FILE(GLOB ...)這一點。

file(GLOB QWT_SEARCH_PATHS "/opt/qwt-*" "/usr/include/qwt-*") 
find_path(QWT_INCLUDE_DIR 
    NAMES qwt_global.h 
    PATHS ${QWT_SEARCH_PATHS}) 

更清潔的實現,建立一個目錄列表,然後遍歷列表中追加「qwt- *」來代替。