因此,我正在編寫一個CMake模塊來查找一些正在我們公司中使用的庫。這些庫都有不同的版本,在這裏很混亂。在某個庫中,甚至頭文件和二進制文件的名稱也不匹配。所以我正在編寫一個CMake腳本來處理所有找到每個庫的所有問題。我腦海裏想寫的東西就是我們如何找到boost軟件包,但也包括每個組件的版本。事情是這樣的:CMake找到其名稱包含特定字符串的文件的路徑
find_package(OrgName COMPONENTS librarya-1.4.3 libraryb-2.3.1 libraryc-3.6.0)
所以我創建了一個FindOrgName.cmake
文件和迭代所請求的組件,然後我處理的,它傳遞的字符串,並與它的版本信息像這樣一起獲得的庫名(沒關係包括和二進制文件之間的差異):
IF(OrgName_FIND_COMPONENTS)
FOREACH(comp ${OrgName_FIND_COMPONENTS})
SET(OrgName_${comp}_FOUND 0)
STRING(FIND ${comp} "-" dashind REVERSE)
STRING(LENGTH ${comp} length)
STRING(SUBSTRING ${comp} 0 ${dashind} name)
MATH(EXPR s "${dashind}+1")
MATH(EXPR l "${length}-${dashind}-1")
STRING(SUBSTRING ${comp} ${s} ${l} version)
SET(OrgName_${name}_INCLUDE_DIR "/usr/local/include/OrgName/${comp}/")
find_library(OrgName_${comp}_LIBRARIES NAMES "${comp}" HINTS "/usr/lib")
IF(OrgName_${comp}_INCLUDE_DIR AND OrgName_${comp}_LIBRARIES)
SET(OrgName_${comp}_FOUND 1)
ENDIF()
IF(NOT OrgName_${comp}_FOUND AND OrgName_FIND_REQUIRED_${comp})
MESSAGE(FATAL_ERROR "OrgName ${comp} not available.")
ENDIF()
SET (OrgName_INCLUDE_DIR ${OrgName_INCLUDE_DIR} ${OrgName_${comp}_INCLUDE_DIR})
SET (OrgName_LIBRARIES ${OrgName_LIBRARIES} ${OrgName_${comp}_LIBRARIES})
ENDFOREACH()
ENDIF()
現在,這裏的問題是,想象有人沒有進入組件名稱版本的一部分。我想搜索他安裝的版本(假設庫的路徑總是相同的)並使用它可以找到的最後一個版本,所以我必須搜索其名稱中包含庫名稱的文件($ {name })。首先,我該怎麼做?其次,我是否正確地做事?我的意思是有更簡單的方法來完成這項任務?