原文: http://blog.csdn.net/yangfeng2014/article/details/50638601 正則表達式
本帖子適用於初學者,StepByStep的入門CMake,CMake也是一門編程語言,只不過是針對編譯和連接這種程序構建的過程的語言,學習基本語法就能夠初步入門,後面須要什麼複雜的功能,進階掌握須要本身去查找官方文檔,後續會給出查閱的一些方式編程
安裝的須要有兩種,一種是從代碼編譯後直接make install安裝,一種是打包時的指定目錄安裝。
這裏須要引入一個新的cmake 指令 INSTALL和一個很是有用的變量CMAKE_INSTALL_PREFIX。
CMAKE_INSTALL_PREFIX變量相似於configure腳本的 –prefix,常見的使用方法看
起來是這個樣子:
cmake -DCMAKE_INSTALL_PREFIX=/usr .編程語言
INSTALL指令用於定義安裝規則,安裝的內容能夠包括目標二進制、動態庫、靜態庫以及
文件、目錄、腳本等。學習
INSTALL指令包含了各類安裝類型,咱們須要一個個分開解釋:spa
INSTALL(TARGETS targets... [[ARCHIVE|LIBRARY|RUNTIME] [DESTINATION <dir>] [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT <component>] [OPTIONAL] ] [...])
參數中的TARGETS後面跟的就是咱們經過ADD_EXECUTABLE或者ADD_LIBRARY定義的
目標文件,多是可執行二進制、動態庫、靜態庫。.net
目標類型也就相對應的有三種,ARCHIVE特指靜態庫,LIBRARY特指動態庫,RUNTIME
特指可執行目標二進制。code
DESTINATION定義了安裝的路徑,若是路徑以/開頭,那麼指的是絕對路徑,這時候
CMAKE_INSTALL_PREFIX其實就無效了。若是你但願使用CMAKE_INSTALL_PREFIX來
定義安裝路徑,就要寫成相對路徑,即不要以/開頭,那麼安裝後的路徑就是
${CMAKE_INSTALL_PREFIX}/<DESTINATION定義的路徑>component
舉個簡單的例子:blog
INSTALL(TARGETS myrun mylib mystaticlib RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION libstatic )
上面的例子會將:
可執行二進制myrun安裝到${CMAKE_INSTALL_PREFIX}/bin目錄
動態庫libmylib安裝到${CMAKE_INSTALL_PREFIX}/lib目錄
靜態庫libmystaticlib安裝到${CMAKE_INSTALL_PREFIX}/libstatic目錄
特別注意的是你不須要關心TARGETS具體生成的路徑,只須要寫上TARGETS名稱就能夠
了。ip
INSTALL(FILES files... DESTINATION <dir> [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT <component>] [RENAME <name>] [OPTIONAL]) 可用於安裝通常文件,並能夠指定訪問權限,文件名是此指令所在路徑下的相對路徑。 若是默認不定義權限PERMISSIONS,安裝後的權限爲,OWNER_WRITE,OWNER_READ, GROUP_READ,和WORLD_READ,即644權限。
INSTALL(PROGRAMS files... DESTINATION <dir> [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT <component>] [RENAME <name>] [OPTIONAL])
跟上面的FILES指令使用方法同樣,惟一的不一樣是安裝後權限爲:
OWNER_EXECUTE, GROUP_EXECUTE, 和WORLD_EXECUTE,即755權限
INSTALL(DIRECTORY dirs... DESTINATION <dir> [FILE_PERMISSIONS permissions...] [DIRECTORY_PERMISSIONS permissions...] [USE_SOURCE_PERMISSIONS] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT <component>] [[PATTERN <pattern> | REGEX <regex>] [EXCLUDE] [PERMISSIONS permissions...]] [...])
這裏主要介紹其中的DIRECTORY、PATTERN以及PERMISSIONS參數。
DIRECTORY後面鏈接的是所在Source目錄的相對路徑,但務必注意:
abc和abc/有很大的區別。
abc意味着abc這個目錄會安裝在目標路徑下;
abc/意味着abc這個目錄的內容會被安裝在目標路徑下;
若是目錄名不以/結尾,那麼這個目錄將被安裝爲目標路徑下的abc,若是目錄名以/結尾,
表明將這個目錄中的內容安裝到目標路徑,但不包括這個目錄自己。
PATTERN用於使用正則表達式進行過濾,
PERMISSIONS用於指定PATTERN過濾後的文件權限。
咱們來看一個例子:
INSTALL(DIRECTORY icons scripts/ DESTINATION share/myproj PATTERN "CVS" EXCLUDE PATTERN "scripts/*" PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ)
這條指令的執行結果是:
將icons目錄安裝到 <prefix>/share/myproj,將scripts/中的內容安裝到
<prefix>/share/myproj
不包含目錄名爲CVS的目錄,對於scripts/*文件指定權限爲 OWNER_EXECUTE
OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ.
INSTALL([[SCRIPT <file>] [CODE <code>]] [...]) SCRIPT參數用於在安裝時調用cmake腳本文件(也就是<abc>.cmake文件) CODE參數用於執行CMAKE指令,必須以雙引號括起來。好比: INSTALL(CODE "MESSAGE(\"Sample install message.\")")