1. 程式人生 > 其它 >CMake Day 6 —— 安裝規則(install rules)

CMake Day 6 —— 安裝規則(install rules)

技術標籤:Linuxc++CMake

CMake Day 6 —— 安裝規則(install rules)

在CMake中,安裝是指將二進位制檔案、庫檔案和標頭檔案等安裝到指定目錄中。

語法:

install(TARGETS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])

該命令是為專案配置安裝規則。在專案中會按照install()命令呼叫的順序執行按照規則。

首先解釋幾個選項:

  • DESTINATION:指定要安裝到的目錄,如果是相對路徑,則是相對於CMAKE_INSTALL_PREFIX變數的,如果是絕對路徑,則直接使用,由於cpack的安裝程式生成器不支援絕對路徑,所有最好使用相對路徑。
  • PERMISSIONS: 指定安裝檔案的許可權,有效許可權有OWNER_READOWNER_WRITEOWNER_EXECUTEGROUP_READGROUP_WRITEGROUP_EXECUTEWORLD_READWORLD_WRITEWORLD_EXECUTE
    SETUIDSETGID。在某些平臺上沒有意義的許可權將被忽略。
  • CONFIGURATIONS: 指定安裝規則適用的構建配置(Debug, Relase等),如果要為Debug和Relase單獨配置安裝路徑,如下:
install(TARGETS target
        CONFIGURATIONS Debug
        RUNTIME DESTINATION Debug/bin)
install(TARGETS target
        CONFIGURATIONS Release
        RUNTIME DESTINATION Release/bin)
  • EXCLUDE_FROM_ALL
    : 指定該檔案從完整安裝中排除。
  • RENAME: 指定已安裝檔案的名稱,該名稱可能與原始檔案不同。僅當命令安裝了單個檔案時,才允許重新命名.

安裝二進位制檔案

語法:

install(TARGETS targets... [EXPORT <export-name>]
        [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
          PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
         [DESTINATION <dir>]
         [PERMISSIONS permissions...]
         [CONFIGURATIONS [Debug|Release|...]]
         [COMPONENT <component>]
         [NAMELINK_COMPONENT <component>]
         [OPTIONAL] [EXCLUDE_FROM_ALL]
         [NAMELINK_ONLY|NAMELINK_SKIP]
        ] [...]
        [INCLUDES DESTINATION [<dir> ...]]
        )

常用引數:

  • ARCHIVE: 靜態庫
  • LIBRARY: 動態庫
  • RUNTIME: 可執行檔案

如果沒有指定下列目錄的路徑,則使用內建的預設值:

TargetVariableBuilt-In Default
RUNTIME${CMAKE_INSTALL_BINDIR}bin
LIBRARY${CMAKE_INSTALL_LIBDIR}lib
ARCHIVE${CMAKE_INSTALL_LIBDIR}lib
PRIVATE_HEADER${CMAKE_INSTALL_INCLUDEDIR}include
PUBLIC_HEADER${CMAKE_INSTALL_INCLUDEDIR}include

安裝檔案和目錄

語法:

install(<FILES|PROGRAMS> files...
        TYPE <type> | DESTINATION <dir>
        [PERMISSIONS permissions...]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>]
        [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])

install(DIRECTORY dirs...
        TYPE <type> | DESTINATION <dir>
        [FILE_PERMISSIONS permissions...]
        [DIRECTORY_PERMISSIONS permissions...]
        [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>] [EXCLUDE_FROM_ALL]
        [FILES_MATCHING]
        [[PATTERN <pattern> | REGEX <regex>]
         [EXCLUDE] [PERMISSIONS permissions...]] [...])

當通過命令列使用cmake --install .或者make install時,將會執行安裝步驟。如果要指定安裝的根目錄,需要使用cmake --install --prefix "/home/user/installdir" .來指定。