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

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

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

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

  1. cmake_minimum_required(VERSION 3.20)
  2. project(cmake_install)

静态库的构建

  1. # 静态库 导出 .lib .a
  2. file(WRITE include/slib.h "void slib();")
  3. # 私有头文件
  4. file(WRITE include/slib_pri.h "#define PRI")
  5. file(WRITE slib.cpp "void slib(){}")
  6. add_library(slib STATIC slib.cpp include/slib.h include/slib_pri.h)
  7. set_target_properties(slib PROPERTIES
  8. PUBLIC_HEADER include/slib.h
  9. )
  10. set_target_properties(slib PROPERTIES
  11. PRIVATE_HEADER include/slib_pri.h
  12. )

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

  1. file(WRITE include/dlib.h [=[
  2. #ifdef _WIN32
  3. __declspec(dllexport)
  4. #endif
  5. void dlib();
  6. ]=])
  7. file(WRITE dlib.cpp [=[
  8. #include "dlib.h"
  9. void dlib(){}
  10. ]=])
  11. add_library(dlib SHARED dlib.cpp include/dlib.h)
  12. target_include_directories(dlib PUBLIC include)

可执行程序的构建

  1. file(WRITE main.cpp [=[
  2. #include "dlib.h"
  3. #include "slib.h"
  4. int main()
  5. {
  6. dlib();
  7. slib();
  8. return 0;
  9. }
  10. ]=])
  11. add_executable(${PROJECT_NAME} main.cpp)
  12. target_include_directories(${PROJECT_NAME} PUBLIC include)
  13. target_link_libraries(${PROJECT_NAME} dlib)
  14. 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 " ")

安装

  1. install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
  2. install(TARGETS dlib slib
  3. RUNTIME DESTINATION bin
  4. ARCHIVE DESTINATION lib
  5. # 头文件的安装
  6. PUBLIC_HEADER DESTINATION include # 公开头文件
  7. PRIVATE_HEADER DESTINATION inc # 内部头文件
  8. )

debug release 设置不同输出路径

  1. install(TARGETS ${PROJECT_NAME}
  2. CONFIGURATIONS Debug
  3. RUNTIME DESTINATION debug/bin
  4. )
  5. install(TARGETS ${PROJECT_NAME}
  6. CONFIGURATIONS Release RelWithDebInfo MinSizeRel
  7. RUNTIME DESTINATION release/bin
  8. )

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

  1. cmake -S . -B win -DCMAKE_INSTALL_PREFIX=win_out
  2. cmake --build win --config Debug
  3. 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. spring与设计模式之四适配器模式

    一.定义 适配器模式-或者称为转接口模式,变压器模式.通过适配,可以让原来提供特定功能的对象完成另外一个标准的功能. 所以,所谓的适配应该可以这样称呼:让某些类/接口适配/转换某个标准/功能. 适配器 ...

  2. 用pm2命令管理你的node项目

    文章目录 前言 安装 运行项目 pm2的命令 前言 我在服务器上运行node项目,使用命令nohup npm start &,结果关闭终端之后,进程就会停止,看来nohup也不是万能的后台运行 ...

  3. 10-Python进程与线程

    Python进程 创建新进程 from multiprocessing import Process import time def run_proc(name): #子进程要执行的代码 for i ...

  4. Android无障碍自动化结合opencv实现支付宝能量自动收集

    Android无障碍服务可以操作元素,手势模拟,实现基本的控制.opencv可以进行图像识别.两者结合在一起即可实现支付宝能量自动收集.opencv用于识别能量,无障碍服务用于模拟手势,即点击能量. ...

  5. 构建3D虚拟世界,有哪些3D建模方式?

    "沉浸.3D世界.虚拟社交.虚拟购物",人们畅想通过AR/VR以及其他互联网技术,把现实世界的楼房街道.天气温度.人际关系等投射到虚拟世界,拥有一个网络分身. 但目前来看,要想实现 ...

  6. FreeRDP使用,快速找出账户密码不正确的服务器地址

    最近有个需求,需要找出服务器未统一设置账户密码的服务器,进行统一设置,一共有一百多台服务器,一个个远程登录看,那得都费劲啊,这时候就可以用到FreeRDP这个远程桌面协议工具,FreeRDP下载,根据 ...

  7. SSM中Mybatis的配置

    注:数据库连接(此过程不当做本次笔记重点,只做简单概述) 1.创建并配置jdbc.properties文件 2.通过Druid连接池配置连接数据库 3.将数据源(dataSource)注入IOC 详细 ...

  8. 基础篇:Stable Diffusion 基础原理详述

    [基础篇]Stable Diffusion 基础原理详述 前言 我认为学习 ComfyUI 应该先从理论学起. 与传统绘图工具(如 Photoshop 或 Figma)相比,AI 绘图工具有着显著不同 ...

  9. 树莓派4B-GPIO控制舵机转动

    树莓派4B-GPIO控制舵机转动 硬件需求: 树莓派 舵机 杜邦线 舵机 什么是舵机? 舵机(servomotor)是一种简化版本的伺服电机,是位置伺服的驱动器,能够通过输入PWM信号控制旋转角度,具 ...

  10. 基于表单登录的cookies登录

    1.基于表单登录的cookies登录 In [ ]: import requests import matplotlib.pyplot as plt from http.cookiejar impor ...