安装具有两种方式,从代码编译后使用命令make install安装,或是打包时指定安装。
指定安装位置将上述编译得到的目标二进制文件hello进行安装,所使用的手动编写的Makefile文件如下:
DESTDIR=install:mkdir -p $(DESTDIR)/usr/bininstall -m 755 hello $(DESTDIR)/usr/bin
通过指令make install可将其安装至目录/usr/bin目录下,若想要指定安装位置,可进行指定参数DESTDIR:
make install DESTDIR=/tmp/test
此时安装位置将保存至/tmp/test/usr/bin目录中。同时,还可以指定PREFIX参数:
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
等同于将Makefile改写为:
DESTDIR=PREFIX=/usrinstall:mkdir -p $(DESTDIR)/$(PREFIX)/bininstall -m 755 hello $(DESTDIR)/$(PREFIX)/bin
INSTALL指令在CMake编译中,使用INSTALL指令进行安装目标二进制文件、动态库、静态库、各自文件、目录、脚本等。
针对不同的文件,所使用的参数不同,分别进行叙述。
目标文件的安装INSTALL(TARGETS targets..、[[ARCHIVE|LIBRARY|RUNTIME] [DESTINATION
上述命令中需要关心的参数如下:
TARGETS:指定安装类型为目标文件,填写TARGETS即可targets…:指定目标文件名称[ARCHIVE|LIBRARY|RUNTIME]:指定文件类型
ARCHIVE:静态库LIBRARY:动态库RUNTIME:可执行目标二进制文件 [DESTINATION
若路径
OWNER_WRITE :拥有者写入权限OWNER_READ :拥有者读取权限OWNER_EXECUTE :组成员执行权限GROUP_WRITE :组成员写入权限GROUP_READ :组成员读取权限GROUP_EXECUTE :组成员执行权限WORLD_WRITE :其他人写入权限WORLD_READ :其他人读取权限WORLD_EXECUTE :其他人执行权限
例如,如下使用方式:
INSTALL(TARGETS myrun mylib mystaticlibRUNTIME DESTINATION bin LIBRARY DESTINATION libARCHIVE DESTINATION libstatic)
上述例子实现如下目标:
二进制文件(RUNTIME)myrun安装至${CMAKE_INSTALL_PREFIX}/bin下动态库文件(LIBRARY)mylib安装至${CMAKE_INSTALL_PREFIX}/lib下静态库文件(ARCHIVE)mystaticlib安装至${CMAKE_INSTALL_PREFIX}/libstatic下 普通文件的安装
INSTALL(FILES files..、DESTINATION
参数如目标文件参数:
FILES:指定安装类型为普通文件,填写FILES即可files…:安装文件名称DESTINATION
INSTALL(PROGRAMS files..、DESTINATION
PROGRAMS:指定安装类型为非目标文件,填写PROGRAMS即可files…:安装文件名称DESTINATION
INSTALL(DIRECTORY dirs..、DESTINATION
DIRECTORY:指定安装类型为目录,直接填写DIRECTORY即可dirs…:目录的相对路径
若目录名不以"/"结尾,则将此目录安装至对应路径下将目录名以“/”结尾,则将此目录下的内容安装至对应路径下,不包括该目录 DESTINATION
[FILE_PERMISSIONS permissions…]:目录内文件权限[DIRECTORY_PERMISSIONS permissions…]:目录自身权限[USE_SOURCE_PERMISSIONS]:权限和源文件相同,优先级低于FILE_PERMISSIONS 筛选参数:
[PATTERN 例如使用该命令执行如下: INSTALL(DIRECTORY icons scripts/ DESTINATION share/myprojPATTERN "CVS" EXCLUDEPATTERN "scripts/*" PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE ) 上述指令执行如下操作: 将目录icons安装${CMAKE_INSTALL_PREFIX}/share/myproj将目录scripts/中的内容安装${CMAKE_INSTALL_PREFIX}/share/myproj在进行安装时,排除包含目录名中包含CVS 的命令在进行安装时,将scripts/*文件的权限指定为731 CMake脚本执行 使用如下指令执行CMake脚本: INSTALL([[script script:指定用于调用CMake脚本,填写script即可 例如: INSTALL(CODE "MESSAGE("Sample install message.")") 上述指令将在终端输出日志:Sample install message.]] [...] )