本帖子適用於初學者,StepByStep的入門CMake,CMake也是一門編程語言,只不過是針對編譯和連接這種程序構建的過程的語言,學習基本語法就能夠初步入門,後面須要什麼複雜的功能,進階掌握須要本身去查找官方文檔,後續會給出查閱的一些方式正則表達式
INSTALL指令
安裝的須要有兩種,一種是從代碼編譯後直接make install安裝,一種是打包時的指定目錄安裝。
這裏須要引入一個新的cmake 指令 INSTALL和一個很是有用的變量CMAKE_INSTALL_PREFIX。
CMAKE_INSTALL_PREFIX變量相似於configure腳本的 –prefix,常見的使用方法看
起來是這個樣子:
cmake -DCMAKE_INSTALL_PREFIX=/usr .編程
INSTALL指令用於定義安裝規則,安裝的內容能夠包括目標二進制、動態庫、靜態庫以及
文件、目錄、腳本等。編程語言
INSTALL指令包含了各類安裝類型,咱們須要一個個分開解釋:學習
目標文件的安裝
INSTALL(TARGETS targets...
[[ARCHIVE|LIBRARY|RUNTIME]
[DESTINATION <dir>]
[PERMISSIONS permissions...]
[CONFIGURATIONS
[Debug|Release|...]]
[COMPONENT <component>]
[OPTIONAL]
] [...])
1
2
3
4
5
6
7
8
9
參數中的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
)
1
2
3
4
5
上面的例子會將:
可執行二進制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權限。
1
2
3
4
5
6
7
8
非目標文件的可執行程序安裝(好比腳本之類)
INSTALL(PROGRAMS files... DESTINATION <dir>
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[RENAME <name>] [OPTIONAL])
1
2
3
4
5
跟上面的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...]] [...])
1
2
3
4
5
6
7
8
這裏主要介紹其中的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)
1
2
3
4
5
這條指令的執行結果是:
將icons目錄安裝到 <prefix>/share/myproj,將scripts/中的內容安裝到
<prefix>/share/myproj
不包含目錄名爲CVS的目錄,對於scripts/*文件指定權限爲 OWNER_EXECUTE
OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ.
安裝時cmake腳本的執行 INSTALL([[SCRIPT <file>] [CODE <code>]] [...]) SCRIPT參數用於在安裝時調用cmake腳本文件(也就是<abc>.cmake文件) CODE參數用於執行CMAKE指令,必須以雙引號括起來。好比: INSTALL(CODE "MESSAGE(\"Sample install message.\")") --------------------- 做者:WhateverYoung 來源:CSDN 原文:https://blog.csdn.net/yangfeng2014/article/details/50638601 版權聲明:本文爲博主原創文章,轉載請附上博文連接!