cmake模板-支持编译动态/静态文件

代码链接:代码仓库

git clone https://gitee.com/etsuyou/cmake-template.git

模板

模板截图
在这里插入图片描述

如何使用

在src和inc中写代码

此处用我默认提供的代码
在这里插入图片描述

./go.sh cmake 生成Makefile

在这里插入图片描述

./go.sh make 生成bin文件和.a以及.so

在这里插入图片描述

./go.sh run app 运行

在这里插入图片描述

./go.sh clean 以及 ./go.sh clean-all 清理build中的内容

在这里插入图片描述

./go.sh -h -help --help 查看帮助

在这里插入图片描述

代码

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(CTEST)
set(CMAKE_C_STANDARD 11)
include_directories(inc)file(GLOB_RECURSE SOURCESsrc/*.c
)
list(FILTER SOURCES EXCLUDE REGEX "src/math/.*")set(MATH_SOURCESsrc/math/add.csrc/math/minus.c
)option(BUILD_STATIC "Build static library" ON)
option(BUILD_SHARED "Build shared library" ON)
set(BUILD_TYPE "shared" CACHE STRING "Choose the build type: static, shared, or none")set(GENERATED_LIB_DIR_NAME lib)
set(GENERATED_PROGRAM_NAME app)set(ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${GENERATED_LIB_DIR_NAME})
set(LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${GENERATED_LIB_DIR_NAME})if(BUILD_STATIC)add_library(math_static STATIC ${MATH_SOURCES})set_target_properties(math_static PROPERTIESARCHIVE_OUTPUT_DIRECTORY ${ARCHIVE_OUTPUT_DIRECTORY}  )
endif()if(BUILD_SHARED)add_library(math_shared SHARED ${MATH_SOURCES})set_target_properties(math_shared PROPERTIESLIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIRECTORY}  )
endif()add_executable(${GENERATED_PROGRAM_NAME} ${SOURCES})if(BUILD_TYPE STREQUAL "none")# do nothing
elseif(BUILD_TYPE STREQUAL "static")target_link_libraries(app math_static)
elseif(BUILD_TYPE STREQUAL "shared")target_link_libraries(app math_shared)
else()# do nothing
endif()# 添加一个自定义的 clean 目标
add_custom_target(clean-allCOMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_BINARY_DIR}/*COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/CMakeFilesCOMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${GENERATED_LIB_DIR_NAME}COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/CMakeCache.txtCOMMENT "Cleaning all build files while preserving the build directory"
)# 你可以选择将 clean-all 目标添加到默认的清理操作中
# set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_BINARY_DIR}")message(STATUS "All tasks finished!")

go.sh

#!/bin/bash# 显示帮助信息的函数
show_help() {echo "用法: $0 <cmake|make|clean|clean-all|run> [app]"echo ""echo "选项:"echo "  cmake      进入 build 目录并运行 cmake .."echo "  make       进入 build 目录并运行 make"echo "  clean      进入 build 目录并运行 make clean"echo "  clean-all  进入 build 目录并运行 make clean-all"echo "  run app    进入 build 目录并运行 ./app (app 是可执行文件的名称)"echo "  -h, --help, -help   显示此帮助信息"
}# 检查参数数量
if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; thenecho "用法: $0 <cmake|make|clean|clean-all|run> [app]"exit 1
fi# 检查帮助参数
if [[ "$1" == "-h" || "$1" == "--help" || "$1" == "-help" ]]; thenshow_helpexit 0
fi# 进入 build 目录
if [ ! -d "build" ]; thenmkdir build
fi
cd build || exit# 根据参数执行相应的命令
case "$1" incmake)cmake ..;;make)make;;clean)make clean;;clean-all)make clean-all;;run)if [ -z "$2" ]; thenecho "错误: 运行应用程序时需要提供应用程序名称。"echo "用法: $0 run <app>"exit 1fi./"$2";;*)echo "无效的参数: $1"echo "用法: $0 <cmake|make|clean|clean-all|run> [app]"exit 1;;
esac

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

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

相关文章

基于FPGA的ov5640摄像头图像采集(二)

之前讲过ov5640摄像头图像采集&#xff0c;但是只包了的摄像头驱动与数据对齐两部分&#xff0c;但是由于摄像头输入的像素时钟与HDMI输出的驱动时钟并不相同&#xff0c;所有需要利用DDR3来将像素数据进行缓存再将像素数据从DDR3中读出&#xff0c;对DDR3的读写参考米联客的IP…

安装TDengine数据库3.3版本和TDengine数据库可视化管理工具

安装TDengine数据库3.3版本和TDengine数据库可视化管理工具 一、下载安装包二、解压安装包三、部署四、启动服务五、进入数据库六、创建数据库、表和往表中插入数据七、测试 TDengine 性能八、使用数据库九、查询数据十、TDengine数据库可视化界面 一、下载安装包 TDengine-cl…

EXCEL怎么锁定单元格(锁定的单元格不能修改)

选中你的需要保护的单元格&#xff0c;然后点击鼠标右键&#xff0c;在弹出来的下拉菜单里面找到单元格格式 设置单元格格式&#xff0c;弹出来的对话框里找到右侧的保护&#xff0c;勾上锁定 找到审阅按钮&#xff0c;在下面找到更改下面的保护工作表按钮 具体保护的操作…

获取京东商品历史价格接口item_history_price介绍

接口开发背景 京东作为中国知名的电商平台&#xff0c;提供了丰富的商品和服务。为了更好地满足用户和商家的需求&#xff0c;京东开放平台推出了多种API接口&#xff0c;其中“item_history_price”接口用于获取指定商品的历史价格信息。这一接口的开发背景在于帮助用户判断当…

JavaSE——集合5:Set(HashSet的底层原理)(重要!!!)

目录 一、Set接口基本介绍 二、Set接口的常用方法 三、Set接口实现类——HashSet 四、HashSet(HashMap底层原理:重要!!!) (一)第一次添加元素 (二)第二次添加不同的元素 (三)添加重复的元素 1.仍旧走到了putVal(hash(key), key, value, false, true);方法 2.判断计算出…

java-02 数据结构-队列

在Java中&#xff0c;队列是一种常见的数据结构&#xff0c;用于在保持顺序的同时存储和检索数据。Java提供了java.util.Queue接口&#xff0c;它的常见实现包括ArrayDeque、LinkedList和PriorityQueue等。 如果你觉得我分享的内容或者我的努力对你有帮助&#xff0c;或者你只…

PyQt5常用功能四

⽂本涂鸦 写⼀些⽂本上下居中对齐的俄罗斯Cylliric语⾔的⽂字 import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QFont from PyQt5.QtCore import Qtclass Example(QWidget):def __init__(self):super().__init__()…

趋势(一)利用python绘制折线图

趋势&#xff08;一&#xff09;利用python绘制折线图 折线图&#xff08; Line Chart&#xff09;简介 折线图用于在连续间隔或时间跨度上显示定量数值&#xff0c;最常用来显示趋势和关系&#xff08;与其他折线组合起来&#xff09;。折线图既能直观地显示数量随时间的变化…

如何查看GB28181流媒体平台LiveGBS中对GB28181实时视频数据统计的负载信息

目录 1、负载信息2、负载信息说明3、会话列表查看 3.1、会话列表4、停止会话5、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负载信息说明 直播&#xff1a;当前推流到平台的实时视频数目回放&#xff1a;当前推流到平台的回…

【无标题】基于情境依赖因果影响的多智能体协作强化学习

、文章探讨了大型语言模型&#xff08;LLMs&#xff09;&#xff0c;例如GPT-4&#xff0c;是否以及在何种意义上拥有知识。作者认为&#xff0c;这些模型展现了一种称为“工具性知识”的能力&#xff0c;这种知识允许它们根据输入上下文推断任务结构&#xff0c;并在此基础上进…

废水处理(一)——MDPI特刊推荐

特刊征稿 01 期刊名称&#xff1a; Removing Challenging Pollutants from Wastewater: Effective Approaches 截止时间&#xff1a; 摘要提交截止日期&#xff1a;2024年11月30日 投稿截止日期&#xff1a;2025年5月31日 目标及范围&#xff1a; 该主题是分享去除有毒物…

js操作元素的其他操作(4个案例+效果图+代码)

目录 1. 获取元素的位置和大小 案例:获取元素的位置和大小 1.代码 2.效果 2. 获取元素的可视区域 案例:获取元素的可视区域 1.代码 2.效果 3. 元素的滚动操作 案例:元素的滚动操作 1.代码 2.效果 4. 获取鼠标指针位置 案例:时刻获取鼠标位置 1.代码 2.效果 案例:拖动的小球 1.代…

万物智联创未来,第三届OpenHarmony技术大会在上海成功举办 深圳触觉智能参会

​10月12日&#xff0c;以“技术引领筑生态&#xff0c;万物智联创未来”为主题的第三届OpenHarmony技术大会&#xff08;以下简称“大会”&#xff09;在上海成功举办。本次大会由OpenHarmony项目群技术指导委员会&#xff08;TSC&#xff09;主办&#xff0c;华为、上海交通大…

阿里云物联网自有app创建之初始化SDK

文章目录 一、新建工程&#xff0c;配置gradle,导入.so文件&#xff0c;生成apk二、上传apk&#xff0c;集成安全图片&#xff0c;下载SDK三、SDK的集成四、初始化SDK 最近在研究阿里云自有app,这是自己的心得。 一、新建工程&#xff0c;配置gradle,导入.so文件&#xff0c;生…

Gin框架官方文档详解03:HTML渲染

注&#xff1a;本教程使用工作区方法管理项目&#xff0c;详见第一讲&#xff1a;创建一个简单的Gin应用。 目录 一、简单渲染二、使用不同目录下名称相同的模板三、自定义模板渲染器四、自定义分隔符五、自定义模板函数六、总结 一、简单渲染 首先&#xff0c;以03HTML渲染为…

机器学习与神经网络:诺贝尔物理学奖的新篇章

机器学习与神经网络&#xff1a;诺贝尔物理学奖的新篇章 引言 2024年诺贝尔物理学奖的颁发&#xff0c;无疑是一个历史性的转折点。这一奖项首次授予了在机器学习与神经网络领域做出杰出贡献的科学家&#xff0c;标志着人工智能技术在科学研究中的重要地位得到了前所未有的认…

3.计算机网络_端口号

端口号的由来 运输层的作用&#xff1a; 在计算机网络中&#xff0c;运输层处在用户功能的最底层、通信部分的最高层的位置&#xff0c;也就是说运输层是用户数据和实际网络通信的桥梁。因此运输层屏蔽了网络的实现部分&#xff0c;以协议的方式向用户层提供了接口&#xff…

Matlab绘图总结(进阶)

本文在前文的基础上进一步整理画图方法 MATLAB画动图_CSDN博客 1. 基础图形绘制 1.1 rectangle&#xff08;矩形&#xff0c;圆形&#xff09; 在前文中&#xff0c;讲解了如何使用rectangle&#xff0c;rectangle本意是用来画矩形的&#xff0c;其中&#xff0c;Curvature可…

【一起学Rust | 框架篇 | Tauri2.0框架】高级概念之安全特性的权限与能力

文章目录 前言一、开发前准备1. 准备项目2. 需求分析1. 监听系统热键2. 切换窗口无边框3. 切换窗口全屏 二、安装插件三、前端实现功能四、配置权限 前言 当前时间为 2024 年 9 月&#xff0c;距离Tauri 2.0 的 RC 版本发布迄今已近一个月。从 Tauri 官方渠道可以看出&#xf…

CVESearch部署、使用与原理分析

文章目录 前言1、概述2、安装与使用2.1、源码安装2.1.1、部署系统依赖组件2.1.1.1、下载安装基础组件2.1.1.2、下载安装MongoDB Community Edition 7.0 2.1.2、使用源码安装系统2.1.2.1、安装CVESearch2.1.2.2、填充MongoDB数据库2.1.2.3、填充Redis数据库 2.2、使用方法 3、测…