CMake INSTALL

原文: http://blog.csdn.net/yangfeng2014/article/details/50638601 正則表達式

 

本帖子適用於初學者,StepByStep的入門CMake,CMake也是一門編程語言,只不過是針對編譯和連接這種程序構建的過程的語言,學習基本語法就能夠初步入門,後面須要什麼複雜的功能,進階掌握須要本身去查找官方文檔,後續會給出查閱的一些方式編程

 

INSTALL指令

安裝的須要有兩種,一種是從代碼編譯後直接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]
                ] [...])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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.\")")
相關文章
相關標籤/搜索