使用cmake进行打包,包含可执行程序和动态依赖库

  平常代码开发中,有时候需要将写的程序打包成压缩包放到目标设备上进行运行测试。用CMake管理工程,实现使用make -jnproc package指令可以将工程进行打包,可执行文件存储在bin文件夹中,依赖库存储在lib文件夹中。

示例

  • 1.工程目录结构
    • CMakeLists.txt
    • License.txt
    • src
    • include
  • 2.打包后

1.工程目录结构

package_test/
│
├── CMakeLists.txt
│
├── License.txt
│
├── src/
│   ├── main.cpp
│   └── lib.cpp
│
└── include/└── lib.h

CMakeLists.txt

cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
project(package_test VERSION 1.0)
message("VERSION 1.0.0")# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
add_compile_options("-Wno-unused-variable")# 指定可执行文件和库文件的输出目录
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
endif()# 添加库
add_library(mylib SHARED src/lib.cpp)
target_include_directories(mylib PUBLIC include)# 添加可执行文件
add_executable(${PROJECT_NAME} src/main.cpp)# 链接库到可执行文件
target_link_libraries(${PROJECT_NAME} PRIVATE mylib)# 设置RPATH(运行时库搜索路径)
set_target_properties(${PROJECT_NAME} PROPERTIESOUTPUT_NAME ${PROJECT_NAME}INSTALL_RPATH "\${ORIGIN}/../lib"
)# 安装规则
install(TARGETS ${PROJECT_NAME} DESTINATION bin)
install(TARGETS mylib DESTINATION lib)# 包括 CPack 打包配置
include(InstallRequiredSystemLibraries)
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")set(CPACK_PACKAGE_VERSION_MAJOR "${package_test_VERSION_MAJOR}")set(CPACK_PACKAGE_VERSION_MINOR "${package_test_VERSION_MINOR}")set(CPACK_PACKAGE_VERSION_PATCH "${package_test_VERSION_PATCH}")set(CPACK_GENERATOR "ZIP")set(CPACK_PACKAGE_NAME "package_test")set(CPACK_PACKAGE_FILE_NAME package_test-${package_test_VERSION})include(CPack)
endif()

License.txt

MIT LicenseCopyright (c) 2024 boss_dogPermission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

src

main.cpp

#include <iostream>
#include "../include/lib.h"int main()
{std::cout << "Hello from Main!" << std::endl;libFunction();return 0;
}

lib.cpp

// lib.cpp
#include "../include/lib.h"
#include <iostream>void libFunction()
{std::cout << "Hello from Library!" << std::endl;
}

include

lib.h

// lib.h
#ifndef LIB_H
#define LIB_Hvoid libFunction();#endif

2.打包后

在工程文件夹下执行如下命令:

mkdir build 
cd build 
cmake ..
make -j`nproc` package

会生成package_test-1.0.zip压缩包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/617358.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

靠谱的大型相亲交友婚恋平台有哪些?相亲app软件前十名

靠谱交友软件&#xff0c;个人感觉还是要选择大型的&#xff0c;口碑好的进行选择&#xff0c;以下是我用过的婚恋平台&#xff0c;分享给大家 1、丛丛 这是我用的最久的一款脱单小程序&#xff0c;我老公就是在这个小程序找到的&#xff01;&#xff01;&#xff01; 这是一款…

CF938Div3(A-F)

A: 买n个酸奶&#xff0c;一次一瓶a元,一次买两瓶可以优惠价b元,也可以a元,问恰好买n瓶需要多少钱. void solve() {int n, a, b;cin >> n >> a >> b;int ans min(a * n, n / 2 * b n % 2 * a);cout << ans << endl; } B: 给你一个数组,问能…

2024最新在线工具箱网站系统源码

2024最新在线工具箱网站系统源码 下载地址: 2024最新在线工具箱网站系统源码-JXASP源码网https://www.jxasp.com/think-php/12489.html

Python零基础入门到精通学习教程2024年最新版,看完这一篇就够了。

前言 2023年即将接近尾声&#xff0c;随着2024年的到来&#xff0c;Python即将步入他的35岁诞生。&#xff08;冷知识&#xff1a;Python1989年诞生&#xff0c;Java是1991年&#xff0c;所以Python比Java更加历史悠久&#xff09;作为当今世界上最受欢迎的编程语言。不少小伙…

Base64编码方式简介

从二进制转为字符的一种编码。每个base64字符表示长度为6个比特的二进制数据&#xff0c;因此可以推得每3个字节&#xff08;24比特&#xff09;可以由4个base64字符组成。base64字符编码表如下&#xff1a; 因此需要注意的是&#xff0c;当二进制文件长度不是3的倍数的时候&a…

书生·浦语2.0(InternLM2)大模型实战--Day03 LMDeploy量化部署 | LLMVLM实战

课程视频&#xff1a;https://www.bilibili.com/video/BV1tr421x75B/课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/README.md课程作业&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/homework.md平台&#xff1a;In…

Linux部署自动化运维平台Spug

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

安装 Kali NetHunter (完整版、精简版、非root版)、实战指南、ARM设备武器化指南、andrax、安卓渗透drozer

From&#xff1a;https://www.kali.org/docs/nethunter/ NetHunter 实战指南&#xff1a;https://www.vuln.cn/6430 乌云 存档&#xff1a;https://www.vuln.cn/wooyundrops 1、Kali NetHunter Kali NetHunter 简介 Net&#xff08;网络&#xff09;&#xff0c;hunter&#x…

【CDN(Content Delivery Network)】

文章目录 CDN&#xff08;Content Delivery Network&#xff09;视频流化服务和CDN&#xff1a;上下文多媒体: 视频存储视频的流化服务&#xff1a;多媒体流化服务&#xff1a;DASH流式多媒体技术3: DASH CDN&#xff08;Content Delivery Network&#xff09; 视频流化服务和…

js基础知识+练习

一&#xff0c;JavaScript简单了解 1.什么是JavaScript JavaScript简称JS&#xff0c;是较为流行的一种前端编程语言&#xff0c;是一种脚本语言&#xff0c;通过解释器运行&#xff0c;主要在客户端&#xff08;浏览器&#xff09;上运行&#xff0c;现在也可以基于node.js在服…

LRUCache原理及源码实现

目录 LRUCache简介&#xff1a; LRUCache的实现&#xff1a; LinkedHashMap方法实现&#xff1a; 自己实现链表&#xff1a; 前言&#xff1a; 有需要本文章源码的友友请前往&#xff1a;LRUCache源码 LRUCache简介&#xff1a; LRU是Least Recently Used的缩写&#xf…

VMware安装Red Hat7.9

1、下载Red Hat Enterprise Linux7.9版本 【百度网盘下载】 链接&#xff1a;https://pan.baidu.com/s/1567NfZRF48PBXfUqxumvDA 提取码&#xff1a;bm7u 2、在虚拟机中创建Red Hat7.9 【点击创建虚拟机】 【自定义高级】 【选择光盘映像安装】 全名自定义即可 【虚拟机命…