【CMake系列】09-cmake install
本节我们来学习,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的更多相关文章
- Cmake实践(Cmake Practice)第一部分
参考资料地址:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf 一.初识cmake 1. C ...
- <<Modern CMake>> 翻译 1. CMake 介绍
<<Modern CMake>> 翻译 1. CMake 介绍 人们喜欢讨厌构建系统. 仅仅观看 CppCon17 上的演讲,就可以看到开发人员因为构建系统而闹笑话的例子. 这 ...
- 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 ...
- 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 ...
- 编译mysql时CMake Error at cmake/readline.cmake:85 (MESSAGE)
CMake Error at cmake/readline.cmake:85 (MESSAGE): Curses library not found. Please install appropr ...
- 【转载】CMake 简介和 CMake 模板
转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 ...
- Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- 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 ...
- CMake Error at cmake/OpenCVUtils.cmake
CMake Error at cmake/OpenCVUtils.cmake:1047 (message): Failed to download . Status= Call Stack (most ...
- C#程序集系列09,程序集签名
在"C#程序集系列08,设置程序集版本"中体验了为程序集设置版本,但对于程序集的安全性来说,还远远不够.本篇体验程序集的签名. □ 程序集的签名 →F盘as文件夹下有多个文件→在程 ...
随机推荐
- 如何在Spring Boot框架下实现高效的Excel服务端导入导出?
前言 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...
- C# pythonnet(3)_Butter-worth低通滤波
Python代码如下 import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy import ...
- 嵌入式工业开发板基础测试手册——基于NXP iMX6ULL开发板(1)
前 言 本文档适用开发环境: Windows开发环境:Windows 7 64bit.Windows 10 64bit 虚拟机:VMware15.1.0 Linux开发环境:Ubuntu18.04.4 ...
- 【经验分享】Docker容器部署方法说明
前 言 本案例适用开发环境: Windows开发环境:Windows 7 64bit.Windows 10 64bit Linux开发环境:Ubuntu 18.04.4 64bit 虚拟机:VMwa ...
- Java在创建同名目录/同名文件时名称拼接(数字)
/** * 创建同名文件名称拼接(数字) * * @param path 需要创建的目录 * @return */ public static String recursionMkdirsFile(S ...
- Quartus Ⅱ调用FIFO IP核方法实现求和(Mega Wizard)
摘要:本次实验学习记录主题为"FIFO_IP核实现算术求和",主要内容是上位机通过串口向FPGA发送一定规格的数字矩阵,FPGA对矩阵处理,按规定逻辑实现求和运算,将结果返回串口转 ...
- 基于 Vagrant 手动部署多个 Redis Server
环境准备 宿主机环境:Windows 10 虚拟机环境:Vagrant + VirtualBox Vagrantfile 配置 首先,我们需要编写一个 Vagrantfile 来定义我们的虚拟机配置. ...
- 移动web开发适配秘籍Rem
目录 移动web开发的特点 Rem 布局适配原理 Media Query(媒体查询) scss 工程使用函数计算 JS动态获取屏幕的宽度 直接将html 的 font-size 设置成 100px 移 ...
- 关联的巧妙用法limit_choices_to
sa_no = models.ForeignKey(CU004HModel, verbose_name='销货单', on_delete=models.PROTECT, related_name='C ...
- oeasy教您玩转vim - 43 - # 替换模式
替换模式 回忆上节课内容 上次我们学到的最有用的就是c 他和d的区别就是删除之后进入到插入模式 c可以配合motion 可以用ciw来快速删除当前光标所在的单词 可i和a 配合的文字块 w wor ...