CMD#32 : find_path
搜索包含某個文件的路徑
find_path(<VAR> name1 [path1 path2 ...])
在多數情況下,使用上述的精簡命令格式就足夠了。它與命令find_path(<VAR> name1 [PATHS path1 path2 ...])等價。
find_path(
<VAR>
name | NAMES name1 [name2 ...]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
該命令用於給定名字文件所在的路徑。一條名為<VAR>的cache條目會被創建,並存儲該命令的執行結果。如果在某個路徑下發現了該文件,該結果會被存儲到該變量中;除非該變量被清除,該次搜索不會繼續進行。如果沒有找到,存儲的結果將會是<VAR>-NOTFOUND,並且當下一次以相同的變量名調用find_path命令時,該命令會再一次嘗試搜索該文件。需要搜索的文件名通過在NAMES選項后面的列出來的參數來確定。附加的搜索位置可以在PATHS選項之后指定。如果在PATHS或者HINTS命令中還指定了ENV var選項,環境變量var將會被讀取並從一個系統環境變量轉換為一個cmake風格的路徑list。比如,ENV PATH是列出系統path變量的一種方法。參數DOC將用來作為該變量在cache中的注釋。PATH_SUFFIXES指定了在每個搜索路徑下的附加子路徑。
如果指定了NO_DEFAULT_PATH選項,那么沒有其它附加的路徑會被加到搜索過程中。如果並未指定NO_DEFAULT_PATH選項,搜索的過程如下:
1、搜索cmake專有的cache變量中的路徑。這種用法是為了在命令行中用選項-DVAR=value指定搜索路徑。如果指定了NO_CMAKE_PATH選項,該路徑會被跳過。搜索路徑還包括:
對於每個在CMAKE_PREFIX_PATH中的<prefix>/,路徑<prefix>/include
CMAKE_INCLUDE_PATH
CMAKE_FRAMEWORK_PATH
2、搜索cmake專有的環境變量中指定的路徑。這種用法是為了在用戶的shell配置中設置指定的搜索路徑。如果指定了NO_CMAKE_ENVIRONMENT_PATH選項,該路徑會被跳過。搜索路徑還包括:
對於每個在CMAKE_PREFIX_PATH中的<prefix>/,路徑<prefix>/include
CMAKE_INCLUDE_PATH
CMAKE_FRAMEWORK_PATH
3、搜索由HINTS選項指定的路徑。這些路徑應該是由系統內省時計算得出的路徑,比如由其它已經發現的項目提供的線索。硬編碼的參考路徑應該在PATHS選項中指定。
4、搜索標准的系統環境變量。通過指定選項NO_SYSTEM_ENVIRONMENT_PATH可以跳過搜索環境變量。搜索的路徑還包括:
PATH
INCLUDE
5、查找在為當前系統的平台文件中定義的cmake變量。如果指定了NO_CMAKE_SYSTEM_PATH選項,該路徑會被跳過。搜索的路徑還包括:
對於每個在CMAKE_SYSTEM_PREFIX_PATH中的<prefix>,路徑<prefix>/include
CMAKE_SYSTEM_LIBRARY_PATH
CMAKE_SYSTEM_FRAMEWORK_PATH
6、搜索PATHS選項或者精簡版命令指定的路徑。這些通常是硬編碼的推薦搜索路徑。
在Darwin或者支持OS X 框架的系統上,cmake變量CMAKE_FIND_FRAMEWORK可以用來設置為空,或者下述值之一:
"FIRST" - 在標准庫或頭文件之前查找框架。在Darwin系統上這是默認選項。
"LAST" - 在標准庫或頭文件之后查找框架。
"ONLY" - 僅僅查找框架。
"NEVER" - 從不查找框架。
在Darwin或者支持OS X Application Bundles的系統,cmake變量CMAKE_FIND_APPBUNDLE可以被設置為空或者下面這些值中的一個:
"FIRST" - 在標准庫或頭文件之前查找application bundles。在Darwin系統上這是默認選項。
"LAST" - 在標准庫或頭文件之后查找application bundles。
"ONLY" - 僅僅查找application bundles。
"NEVER" - 從不查找application bundles。
CMake變量CMAKE_FIND_ROOT_PATH指定了一個或者多個優先於其他搜索路徑的搜索路徑。該變量能夠有效地重新定位在給定位置下進行搜索的根路徑。該變量默認為空。當使用交叉編譯時,該變量十分有用:用該變量指向目標環境的根目錄,然后CMake將會在那里查找。默認情況下,在CMAKE_FIND_ROOT_PATH中列出的路徑會首先被搜索,然后是“非根”路徑。該默認規則可以通過設置CMAKE_FIND_ROOT_PATH_MODE_LIBRARY做出調整。在每次調用該命令之前,都可以通過設置這個變量來手動覆蓋默認行為。如果使用了NO_CMAKE_FIND_ROOT_PATH變量,那么只有重定位的路徑會被搜索。
默認的搜索順序的設計邏輯是按照使用時從最具體到最不具體的路徑。通過多次調用find_path命令以及NO_*選項,可以覆蓋工程的這個默認順序:
find_path(<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_path(<VAR> NAMES name)
只要這些調用中的一個成功返回,結果變量就會被設置並且被存儲到cache中;這樣隨后的調用都不會再行搜索。在搜索框架時,如果以A/b.h的格式指定文件,那么該框架搜索過程會搜索A.framework/Headers/b.h。如果找到了該路徑,它將會被設置為框架的路徑。CMake將把它轉換為正確的-F選項來包含該文件。
===========================分==割==線=========================
最近工作比較忙,所以翻譯沒以前那么勤了,翻譯的詞句也只是保證能夠勉強看懂而已。以后有時間了一定回過頭來認真修訂下,統一風格和措辭。