CMD#33:find_program
查找可執行程序
find_program(<VAR> name1 [path1 path2 ...])
這是該命令的精簡格式,它在大多數場合下都夠用了。命令find_program(<VAR> name1 [PATHS path1 path2 ...])是它的等價形式。
find_program(
<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,並且下次以相同的變量調用該命令時,還會做搜索的嘗試。被搜索的程序的名字由NAMES選項后列出的參數指定。附加的搜索位置可以在PATHS參數后指定。如果在HINTS或者PATHS選項后有ENV var參數,環境變量var將會被讀取並從系統環境變量轉換為cmake風格的路徑list。比如ENV PATH是一種列出所有系統path變量的方法。DOC后的參數將會被用作cache中的注釋字符串。PATH_SUFFIXES指定了在每個搜索路徑下要檢查的附加子路徑。
如果指定了NO_DEFAULT_PATH選項,那么搜索的過程中不會有其他的附加路徑。如果沒有指定該選項,搜索過程如下:
1、搜索cmake特有的cache變量指定的路徑。這些變量是在用cmake命令行時,通過-DVAR=value指定的變量。如果指定了NO_CMAKE_PATH選項,這些路徑會被跳過。搜索的路徑還包括:
對於每個在CMAKE_PREFIX_PATH中的<prefix>,路徑<prefix>/[s]bin
CMAKE_PROGRAM_PATH
CMAKE_APPBUNDLE_PATH
2、搜索cmake特有的環境變量指定的路徑。這些變量是用戶的shell配置中設置的變量。如果指定了NO_CMAKE_ENVIRONMENT_PATH選項,這些路徑會被跳過。搜索的路徑還包括:
對於每個在CMAKE_PREFIX_PATH中的<prefix>,路徑<prefix>/[s]bin
CMAKE_PROGRAM_PATH
CMAKE_APPBUNDLE_PATH
3、搜索由HINTS選項指定的路徑。這些路徑是系統內省(introspection)估算出的路徑,比如由另一個已經發現的程序的地址提供的參考信息。硬編碼的推薦路徑應該通過PATHS選項指定。
4、查找標准的系統環境變量。如果指定了NO_SYSTEM_ENVIRONMENT_PATH選項,這些路徑會被跳過。搜索的路徑還包括:
PATH
5、查找在為當前系統的平台文件中定義的cmake變量。如果指定了NO_CMAKE_SYSTEM_PATH選項,該路徑會被跳過。搜索的路徑還包括:
對於每個在CMAKE_SYSTEM_PREFIX_PATH中的<prefix>,路徑<prefix>/[s]bin
CMAKE_SYSTEM_PROGRAM_PATH
CMAKE_SYSTEM_APPBUNDLE_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變量,那么只有重定位的路徑會被搜索。
默認的搜索順序的設計邏輯是按照使用時從最具體到最不具體。通過多次以NO_*選項調用find_program命令,可以覆蓋工程的這個默認順序:
find_library(<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_library(<VAR> NAMES name)
只要這些調用中的一個成功返回,結果變量就會被設置並且被存儲到cache中;這樣隨后的調用都不會再行搜索。
CMD#34:fltk_wrap_ui
創建FLTK用戶界面包裝器。
fltk_wrap_ui(resultingLibraryName source1
source2 ... sourceN )
為所有列出的.fl和.fld文件生成.h和.cxx文件。這些生成的.h和.cxx文件將會加到變量resultingLibraryName_FLTK_UI_SRCS中,它也會加到你的庫中。