本节我们来学习,cmake的安装,将我们构建的目标安装到指定位置,为了模拟一般情况,实现了 可执行文件、静态库、动态库的安装,以及一般的 file 安装、代码的安装

本专栏的实践代码全部放在 github 上,欢迎 star !!!

如有问题,欢迎留言、或加群【392784757】交流

接下来将分步给出今天的CMakeLists.txt 内容

cmake_minimum_required(VERSION 3.20)

project(cmake_install)

静态库的构建

# 静态库 导出 .lib .a
file(WRITE include/slib.h "void slib();")
# 私有头文件
file(WRITE include/slib_pri.h "#define PRI") file(WRITE slib.cpp "void slib(){}") add_library(slib STATIC slib.cpp include/slib.h include/slib_pri.h) set_target_properties(slib PROPERTIES
PUBLIC_HEADER include/slib.h
) set_target_properties(slib PROPERTIES
PRIVATE_HEADER include/slib_pri.h
)

动态库的构建【需要设置在windows平台下 符号导出】

file(WRITE include/dlib.h [=[
#ifdef _WIN32
__declspec(dllexport)
#endif
void dlib();
]=]) file(WRITE dlib.cpp [=[
#include "dlib.h"
void dlib(){}
]=]) add_library(dlib SHARED dlib.cpp include/dlib.h)
target_include_directories(dlib PUBLIC include)

可执行程序的构建

file(WRITE main.cpp [=[
#include "dlib.h"
#include "slib.h" int main()
{
dlib();
slib();
return 0;
} ]=]) add_executable(${PROJECT_NAME} main.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC include) target_link_libraries(${PROJECT_NAME} dlib)
target_link_libraries(${PROJECT_NAME} slib)

安装构建目标

默认安装路径

  • linux /usr/local
  • windows c:/program files(x86) 【会出现权限不够、安装失败的情况】
  • windows 默认构建是 debug版本,安装是 release 版本,因此执行命令时需要指定 --config 统一

安装路径指定,两种方式

  • -DCMAKE_INSTALL_PREFIX=
  • set(CMAKE_INSTALL_PREFIX " ")

安装

install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)

install(TARGETS dlib slib
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib
# 头文件的安装
PUBLIC_HEADER DESTINATION include # 公开头文件
PRIVATE_HEADER DESTINATION inc # 内部头文件
)

debug release 设置不同输出路径

install(TARGETS ${PROJECT_NAME}
CONFIGURATIONS Debug
RUNTIME DESTINATION debug/bin ) install(TARGETS ${PROJECT_NAME}
CONFIGURATIONS Release RelWithDebInfo MinSizeRel
RUNTIME DESTINATION release/bin
)

构建指令 windows,注意指定类型

cmake -S . -B win -DCMAKE_INSTALL_PREFIX=win_out
cmake --build win --config Debug
cmake --install win --config Debug

【CMake系列】09-cmake install的更多相关文章

  1. Cmake实践(Cmake Practice)第一部分

    参考资料地址:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf 一.初识cmake 1. C ...

  2. <<Modern CMake>> 翻译 1. CMake 介绍

    <<Modern CMake>> 翻译 1. CMake 介绍 人们喜欢讨厌构建系统. 仅仅观看 CppCon17 上的演讲,就可以看到开发人员因为构建系统而闹笑话的例子. 这 ...

  3. ubuntu 16.04上源码编译glog和gflags 编写glog-config.cmake和gflags-config.cmake | compile glog and glags on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/977f5125/,欢迎阅读! compile glog and glags on ubuntu 16.04 Series comp ...

  4. Windows 10上源码编译glog和gflags 编写glog-config.cmake和gflags-config.cmake | compile glog and glags on windows from source

    本文首发于个人博客https://kezunlin.me/post/bb64e398/,欢迎阅读! compile glog v0.3.5 and glags on windows from sour ...

  5. 编译mysql时CMake Error at cmake/readline.cmake:85 (MESSAGE)

    CMake Error at cmake/readline.cmake:85 (MESSAGE):  Curses library not found.  Please install appropr ...

  6. 【转载】CMake 简介和 CMake 模板

    转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 ...

  7. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  8. mysqlQL 5.7 安装报错CMake Error at cmake/boost.cmake:81 (MESSAGE)

    CMake Error at cmake/boost.cmake:81 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BO ...

  9. CMake Error at cmake/OpenCVUtils.cmake

    CMake Error at cmake/OpenCVUtils.cmake:1047 (message): Failed to download . Status= Call Stack (most ...

  10. C#程序集系列09,程序集签名

    在"C#程序集系列08,设置程序集版本"中体验了为程序集设置版本,但对于程序集的安全性来说,还远远不够.本篇体验程序集的签名. □ 程序集的签名 →F盘as文件夹下有多个文件→在程 ...

随机推荐

  1. JSONPATH-阿里和jayway的实现测试

    业务业务的需要,所以想找一个从对象中获取属性的工具. 搜了搜发现由阿里和jayway的实现,又花费了一些时间了解和练习,总结了一些要点: 阿里的可能快一些,但考虑到完备性,也许选择jayway更好一些 ...

  2. dotnet 融合 Avalonia 和 UNO 框架

    现在在 .NET 系列里面,势头比较猛的 UI 框架中,就包括了 Avalonia 和 UNO 框架.本文将告诉大家如何尝试在一个解决方案里面融合 Avalonia 和 UNO 两个框架,即在一个进程 ...

  3. 【译】VisualStudio.Extensibility 17.10:用 Diagnostics Explorer 调试您的扩展

    想象一下,创建的扩展比以往任何时候都运行得更快.更流畅!如果您最近还没有跟上,我们一直在努力改进 VisualStudio. Extensibility SDK.VisualStudio. Exten ...

  4. 《DNK210使用指南 -CanMV版 V1.0》第六章 Kendryte K210固件烧录

    第六章 Kendryte K210固件烧录 1)实验平台:正点原子DNK210开发板 章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail. ...

  5. 《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建

    第四章 基于CanMV的C开发环境搭建 1)实验平台:正点原子DNK210开发板 2) 章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail ...

  6. 基于 TI Sitara系列 AM64x核心板——程序自启动说明

    前 言 本文主要介绍AM64x的Cortex-A53.Cortex-M4F和Cortex-R5F核心程序自启动使用说明.默认使用AM6442进行测试演示,AM6412测试步骤与之类似. 本说明文档适用 ...

  7. DAX 自动生成日期表-与订单表(业绩表)相同日期区间

    日期表 = ADDCOLUMNS ( CALENDAR (MIN('业绩表'[日期]), MAX('业绩表'[日期])), //关键在于MIN函数和MAX函数的使用 "年度", Y ...

  8. CF1093E 题解

    来一发 \(O(n \sqrt n)\) 时间,\(O(n)\) 空间的分块写法. 首先建模,把 数值 \(x\) 在两个数组中出现的位置作为坐标,问题就转化为一个二维动态数点. 考虑用序列分块维护第 ...

  9. Mysql 日期查询今天、昨天、近7天、近30天、本月、上一月、本季

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...

  10. ping和tcping的区别

    ping是简单的测试网络连接情况的小命令,但是ping无法直接ping端口.某些网站还防ping,tcping工具也是通过ping来测试但是他能看端口是否打开