2013-06-01 71 views
4

我正在同時處理多個項目(一些庫和一些依賴它們的遊戲)。他們都在GitHub上,分開回購。防止CMake查找已安裝的庫而不是「本地」庫

爲了方便,我每次拉回購在「工作區文件夾」,這樣的:

/home/myWorkspace/Library1/ 
/home/myWorkspace/Library2/ 
/home/myWorkspace/Library3/ 
/home/myWorkspace/App1/ 
/home/myWorkspace/App2/ 

我有FindLibrary1FindLibrary2FindLibrary3 .cmake文件,這些文件按順序查找庫中../ (對應於「myWorkspace」文件夾),然後/usr/lib/

在Windows上CMa​​ke找到myWorkspace/中的庫,在Linux上,無論如何,總是先找到已安裝的庫。

由於我想在myWorkspace/文件夾中工作,然後在完成後安裝庫,我寧願CMake查找並鏈接myWorkspace/文件夾中的所有內容。

我也會喜歡CMake的搜索庫中/usr/lib//usr/local/lib/如果沒有myWorkspace/文件夾,但如果myWorkspace/存在,它應該有優先權。

的CMake的文件的例子我使用:


SSVUtils:庫沒有依賴關係

SSVUtils CMakeLists:https://github.com/SuperV1234/SSVUtils/blob/master/CMakeLists.txt

FindSSVUtils.cmake:https://github.com/SuperV1234/SSVUtils/blob/master/cmake/modules/FindSSVUtils.cmake


SSVUtilsJson:依賴於o的庫ñSSVUtils和SSVJsonCpp

SSVUtilsJson CMakeLists:https://github.com/SuperV1234/SSVUtilsJson/blob/master/CMakeLists.txt

FindSSVUtilsJson.cmake:https://github.com/SuperV1234/SSVUtilsJson/blob/master/cmake/modules/FindSSVUtilsJson.cmake


任何想法,同時還具有找到文件系統路徑庫的可能性,我可以怎樣優先考慮myWorkspace/文件夾?

回答

5

默認情況下,在搜索PATH中提供的值之前,find_path(或find_library等)首先檢查系統標準位置中的文件。這就是爲什麼「安裝」庫總是首先在Linux上找到(但不是在Windows上,它沒有安裝庫的標準位置)。

您可以使用NO_CMAKE_SYSTEM_PATH選項禁用該行爲:它將跳過檢測標準位置中的文件。

現在......如果你仍然想使用已安裝的庫作爲備用時都沒有找到本地版本,你可以在兩個步驟做:

find_path(... NO_CMAKE_SYSTEM_PATH) 

if (nothing_found) 
    find_path(...) 
endif() 
相關問題