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

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

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} PROPERTIES
    OUTPUT_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 License

Copyright (c) 2024 boss_dog

Permission 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_H

void libFunction();

#endif

2.打包后

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

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

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

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 19:18:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 19:18:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 19:18:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 19:18:03       20 阅读

热门阅读

  1. Internet Download Manager(IDM):提升下载效率的神器

    2024-04-14 19:18:03       30 阅读
  2. 2024-4-14关于闭包的理解

    2024-04-14 19:18:03       16 阅读
  3. 线程池的参数 以及实现

    2024-04-14 19:18:03       17 阅读
  4. 【接着模拟赛】2024.4.14

    2024-04-14 19:18:03       17 阅读
  5. 239. 滑动窗口最大值

    2024-04-14 19:18:03       15 阅读
  6. win10清华源按装OPENCV和其他软件

    2024-04-14 19:18:03       16 阅读
  7. Csharp_pta2

    2024-04-14 19:18:03       14 阅读
  8. 中文域名有必要注册吗?

    2024-04-14 19:18:03       14 阅读