打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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指令包含了各种安装类型,我们需要一个个分开解释:

目标文件的安装

INSTALL(TARGETS targets...        [[ARCHIVE|LIBRARY|RUNTIME]                   [DESTINATION <dir>]                   [PERMISSIONS permissions...]                   [CONFIGURATIONS        [Debug|Release|...]]                   [COMPONENT <component>]                   [OPTIONAL]                ] [...])

参数中的TARGETS后面跟的就是我们通过ADD_EXECUTABLE或者ADD_LIBRARY定义的
目标文件,可能是可执行二进制、动态库、静态库。

目标类型也就相对应的有三种,ARCHIVE特指静态库,LIBRARY特指动态库,RUNTIME
特指可执行目标二进制。

DESTINATION定义了安装的路径,如果路径以/开头,那么指的是绝对路径,这时候
CMAKE_INSTALL_PREFIX其实就无效了。如果你希望使用CMAKE_INSTALL_PREFIX来
定义安装路径,就要写成相对路径,即不要以/开头,那么安装后的路径就是
${CMAKE_INSTALL_PREFIX}/<DESTINATION定义的路径>

举个简单的例子:

INSTALL(TARGETS myrun mylib mystaticlib       RUNTIME DESTINATION bin       LIBRARY DESTINATION lib       ARCHIVE DESTINATION libstatic)

上面的例子会将:
可执行二进制myrun安装到${CMAKE_INSTALL_PREFIX}/bin目录
动态库libmylib安装到${CMAKE_INSTALL_PREFIX}/lib目录
静态库libmystaticlib安装到${CMAKE_INSTALL_PREFIX}/libstatic目录
特别注意的是你不需要关心TARGETS具体生成的路径,只需要写上TARGETS名称就可以
了。

普通文件的安装

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权限。

非目标文件的可执行程序安装(比如脚本之类)

INSTALL(PROGRAMS files... DESTINATION <dir>     [PERMISSIONS permissions...]     [CONFIGURATIONS [Debug|Release|...]]     [COMPONENT <component>]     [RENAME <name>] [OPTIONAL])

跟上面的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...]] [...])

这里主要介绍其中的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)

这条指令的执行结果是:
将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.\")")
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
CMake快速入门教程:实战
cpack
./configure --prefix --with解释
CMake使用入门
【转载】CMake 两种变量原理
使用外接库文件设置
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服