cmake的install

一、介绍

一般使用cmake,常用命令就是

mkdir build && cd build
cmake ..
make
make install

install命令为项目生成一系列的安装规则。在执行make install时,所指定的安装规则会被依次执行,最终将目标文件(so,exe,其他文件等)复制到指定的路径下。

二、语法

第一种,目标文件的安装

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

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

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

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

 第二种,普通文件的安装

install(<FILES|PROGRAMS> 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] [OPTIONAL] [MESSAGE_NEVER]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>] [FILES_MATCHING]
        [[PATTERN <pattern> | REGEX <regex>]
         [EXCLUDE] [PERMISSIONS permissions...]] [...])

二、实例

举个简单的例子:


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 目录

另一个例子,需要在llinux环境测试

cmake_minimum_required (VERSION 3.12.1)
 
project (Demo)
 
# 生成对象库文件,不链接
add_library(hello OBJECT hello.cpp)
 
# 添加头文件目录
target_include_directories(hello PUBLIC ${CMAKE_SOURCE_DIR}/public)

# 安装Obj文件,有设置目录,输出到Output目录下
install(TARGETS hello OBJECTS DESTINATION ${CMAKE_CURRENT_SOURCE}/output)

# 安装Obj文件,没有设置目录,直接输出到路径
install(FILES $<TARGET_OBJECTS:hello> DESTINATION ${CMAKE_CURRENT_SOURCE}/output)
 
# 生成可执行文件
add_executable(Demo main.cpp)
 
# 链接对象库
target_link_libraries(Demo hello)

参考:

http://file.ncnynl.com/ros/CMake%20Practice.pdf

install — CMake 3.1.3 Documentation【CMake】cmake的install指令_Yngz_Miao的博客-CSDN博客_cmake installinstall — CMake 3.1.3 Documentation

CMake之install方法的使用 - 知乎

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cmake INSTALL是一个用于CMake构建系统的命令,用于将构建的项目安装到指定的目录中。引用中提到了常用的cmake命令,包括make install,该命令将构建好的项目文件安装到默认的目录/usr/local。如果没有定义CMAKE_INSTALL_PREFIX,将会使用默认的安装目录/usr/local。引用中通过示例展示了如果没有定义CMAKE_INSTALL_PREFIX,可以尝试执行cmake ..;make;make install命令,会发现默认的CMAKE_INSTALL_PREFIX定义为/usr/local。如果你想将项目安装到其他指定的目录,可以使用-DCMAKE_INSTALL_PREFIX选项来指定安装路径,如引用所示,执行cmake -DCMAKE_INSTALL_PREFIX=/home/ubuntu/work/usr命令即可将项目安装到/home/ubuntu/work/usr目录下。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [cmakeinstall](https://blog.csdn.net/sinat_31608641/article/details/122517522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [cmake使用教(二) install的使用](https://blog.csdn.net/weixin_42398658/article/details/121672529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值