欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

CMake编译:安装编译文件

时间:2023-07-25
安装

安装具有两种方式,从代码编译后使用命令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

] [PERMISSIONS permissions...] [ConFIGURATIONS [Debug|Release|...]] [COMPonENT ] [OPTIONAL]] [...])

上述命令中需要关心的参数如下:

TARGETS:指定安装类型为目标文件,填写TARGETS即可targets…:指定目标文件名称[ARCHIVE|LIBRARY|RUNTIME]:指定文件类型

ARCHIVE:静态库LIBRARY:动态库RUNTIME:可执行目标二进制文件 [DESTINATION

]:自定安装路径

若路径

为绝对路径,以"/"开头若路径为相对路径,则实际安装路径为:${CMAKE_INSTALL_PREFIX}/ [PERMISSIONS permissions…] :用户权限,最高777(参考liunx权限)

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

[PERMISSIONS permissions...][ConFIGURATIONS [Debug|Release|...]][COMPonENT ][RENAME ] [OPTIONAL] )

参数如目标文件参数:

FILES:指定安装类型为普通文件,填写FILES即可files…:安装文件名称DESTINATION

:安装路径[PERMISSIONS permissions…]:权限,默认644(所有者可读可写,组可读,其他人可读) 非目标文件的安装

INSTALL(PROGRAMS files..、DESTINATION

[PERMISSIONS permissions...][ConFIGURATIONS [Debug|Release|...]][COMPonENT ][RENAME ] OPTIONAL] )

PROGRAMS:指定安装类型为非目标文件,填写PROGRAMS即可files…:安装文件名称DESTINATION

:安装路径[PERMISSIONS permissions…]:权限,默认755(所有者可读可写可执行,组可读可执行,其他人可读可执行) 目录的安装

INSTALL(DIRECTORY dirs..、DESTINATION

[FILE_PERMISSIONS permissions...][DIRECTORY_PERMISSIONS permissions...][USE_SOURCE_PERMISSIONS][ConFIGURATIONS [Debug|Release|...]][COMPonENT ][[PATTERN | REGEX ] [EXCLUDE] [PERMISSIONS permissions...]] [...] )

DIRECTORY:指定安装类型为目录,直接填写DIRECTORY即可dirs…:目录的相对路径

若目录名不以"/"结尾,则将此目录安装至对应路径下将目录名以“/”结尾,则将此目录下的内容安装至对应路径下,不包括该目录 DESTINATION

:安装路径权限参数:

[FILE_PERMISSIONS permissions…]:目录内文件权限[DIRECTORY_PERMISSIONS permissions…]:目录自身权限[USE_SOURCE_PERMISSIONS]:权限和源文件相同,优先级低于FILE_PERMISSIONS 筛选参数:

[PATTERN :采用模式匹配进行筛选内容 REGEX :采用正则匹配进行筛选内容[EXCLUDE]:安装时,排除筛选得到的文件[PERMISSIONS permissions…]:指定筛选得到的文件的权限

例如使用该命令执行如下:

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 ] [CODE ]] [...] )

script:指定用于调用CMake脚本,填写script即可:具体执行的脚本文件CODE :执行CMake指令,必须用双引号括起

例如:

INSTALL(CODE "MESSAGE("Sample install message.")")

上述指令将在终端输出日志:Sample install message.

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。