在cmake項目里,最終生成的可執(zhí)行文件往往需要一些配置才能正常運行,這些配置可能會存儲入var, etc目錄,不建議自己寫死install路徑,或者將install的函數(shù)再封裝都是不推薦的,畢竟會增加額外的耦合,推薦用cmake內(nèi)置變量指定安裝文件,如下:
CMAKE_INSTALL_BINDIR: bin
CMAKE_INSTALL_DOCDIR: share/doc
CMAKE_INSTALL_INCLUDEDIR: include
CMAKE_INSTALL_DATADIR: share
CMAKE_INSTALL_INFODIR: share/info
CMAKE_INSTALL_LIBDIR: lib
CMAKE_INSTALL_MANDIR: share/man
CMAKE_INSTALL_SBINDIR: sbin
CMAKE_INSTALL_LIBEXECDIR: libexec
CMAKE_INSTALL_SYSCONFDIR: etc
CMAKE_INSTALL_SHAREDSTATEDIR: com
CMAKE_INSTALL_LOCALSTATEDIR: var
CMAKE_INSTALL_RUNSTATEDIR: var/run
CMAKE_INSTALL_DATAROOTDIR: share
CMAKE_INSTALL_LOCALEDIR: share/locale
install(TARGETS my_executable DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES my_config.conf DESTINATION ${CMAKE_INSTALL_SYSCONFDIR})
install(FILES my_data_file DESTINATION ${CMAKE_INSTALL_LOCALSTATEDIR})
...
需要注意的是需要導入系統(tǒng)配置, 上面的CMake變量才會有值:
if(WIN32)
include(InstallRequiredSystemLibraries)
elseif(UINIX)
include(GNUInstallDirs)
endif()
詳細參考如下:
GNUInstallDirs
InstallRequiredSystemLibraries
如果設置的CMAKE_INSTALL_PREFIX為/home/test/Download/install,那么文件會分別安裝到:
/home/test/Download/install/bin
/home/test/Download/install/var
/home/test/Download/install/etc
...
如果重新設置以下路徑為opt:
set(CMAKE_INSTALL_BINDIR "opt")
set(CMAKE_INSTALL_LOCALSTATEDIR "opt")
set(CMAKE_INSTALL_SYSCONFDIR "opt")
那么文件會分別安裝到:
/home/test/Download/install/opt
/home/test/Download/install/opt
/home/test/Download/install/opt
...