自学内容网 自学内容网

CMake学习笔记:项目的导出和安装-install命令

一、基本语法与概念

1.文件的安装 install(FILES)

用Poco库 usr/local/poco/CMakeLists.txt中内容 举例如下:

2.目标安装 install(TARGETS)

3.导出目标与导出配置文件

将目标mylib导出名为MyModules的目标。MyModules导出目标包含了关于mylib的所有信息,包括头文件路径、库文件路径等内容

#生成导出目标MyModules
install(
    TARGETS mylib
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    RUNTIME DESTINATION bin
    EXPORT MyModules           #指定导出目标
)

将该导出MyModules目标转换为对应的 *.cmake 文件,*.cmake 文件为导出配置文件,指定导出目标的安装策略。*.cmake文件导出到DESTINATION指定的路径下。

install(
    EXPORT MyModules
    FILE MyModules.cmake
    DESTINATION lib/cmake/MyModules
)

4.安装

语句:sudo make install

运行 sudo make install 后在安装路径下自动生成了MyModules.cmake导出配置文件

5.XXXConfig.cmake文件

XXXConfig.cmake文件用于其他项目通过find_package命令找到和使用XXX这个库‌。XXXConfig.cmake可以只有一行代码,如下

include("${CMAKE_CURRENT_LIST_DIR}/MyModules.cmake")

configure_package_config_file自动生成XXXConfig.cmake文件、XXXConfig.cmake.in文件的编写、导出XXXConfig.cmake文件后续会补充进来。

二、示例代码

1.任务需求

2.项目目录

3.mylib的CMakeLists.txt文件

#导出静态库
add_library(mylib src/mylib.cpp)

#设置编译和运行路径
target_include_directories(
    mylib PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
)
#生成导出目标MyModules
install(
    TARGETS mylib
    EXPORT MyModules   #指定导出目标
    ARCHIVE DESTINATION lib
)
#导出目标是虚拟概念,要把导出目标转化为导出配置文件
#生成导出配置文件.cmake

4.mylib2的CMakeLists.txt文件

#导出静态库
add_library(mylib2 src/mylib2.cpp)

#设置编译和运行路径
target_include_directories(
    mylib2 PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
)

install(
    TARGETS mylib2
    EXPORT MyModules   #指定导出目标
    DESTINATION lib
)

5.INSTALLDEMO项目的CMakeLists.txt文件

cmake_minimum_required(VERSION 3.30)
project(InstallDemo)

add_subdirectory(mylib)
add_subdirectory(mylib2)

#把导出目标生成导出配置文件并且安装到指定路径
#导出配置文件是由导出目标自动生成的
install(
    EXPORT MyModules
    FILE MyModules.cmake
    DESTINATION lib/cmake/MyModules
)

6.运行结果

7.在其他项目使用生成的XXXConfig.cmake文件 


原文地址:https://blog.csdn.net/flybirddizi/article/details/142709482

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!