嵌套的CMake

heheda@linux:~/Linux/multi-v1$ tree
.
├── calc
│   ├── add.cpp
│   ├── CMakeLists.txt
│   ├── div.cpp
│   ├── mult.cpp
│   └── sub.cpp
├── CMakeLists.txt
├── include
│   ├── calc.h
│   └── sort.h
├── sort
│   ├── CMakeLists.txt
│   ├── insert.cpp
│   └── select.cpp
├── test1
│   ├── calc.cpp
│   └── CMakeLists.txt
└── test2├── CMakeLists.txt└── sort.cpp5 directories, 15 files
heheda@linux:~/Linux/multi-v1$ 

1.include 目录:头文件目录

2.calc目录:目录中的四个源文件对应的加/减/乘/除算法

  • 对应的头文件是include中的calc.h

3.sort目录:目录中的两个源文件对应的是插入排序和选择排序算法

  • 对应的头文件是include中的sort.h

4.test1 目录:测试目录,对加、减、乘、除算法进行测试

5.test2 目录:测试目录,对排序算法进行测试

一、calc文件夹 

  • calc的add.cpp
#include <stdio.h>
#include "calc.h"int add(int a, int b)
{return a+b;
}
  • calc的div.cpp 
#include <stdio.h>
#include "calc.h"double divide(int a, int b)
{return (double)a/b;
}
  • calc的mult.cpp 
#include <stdio.h>
#include "calc.h"int multiply(int a, int b)
{return a*b;
}
  • calc的sub.cpp 
#include <stdio.h>
#include "calc.h"// 你好
int subtract(int a, int b)
{return a-b;
}

二、sort文件夹  

  • sort的insert.cpp
#include <iostream>
using namespace std;
void print(int a[], int n)
{for(int j= 0; j<n; j++){cout<<a[j] <<"  ";}cout<<endl;
}void insert(int a[], int n)
{for(int i = 1; i < n; i++) //第一个元素作为基准元素,从第二个元素开始把其插到正确的位置{if(a[i] < a[i-1]) //如果第i个元素比前面的元素小{int j = i-1;     //需要判断第i个元素与前面的多个元素的大小,换成j继续判断int x = a[i]; //将第i个元素复制为哨兵while(j >= 0 && x < a[j]) //找哨兵的正确位置,比哨兵大的元素依次后移{a[j+1] = a[j];j--;}a[j+1] = x;  //把哨兵插入到正确的位置}}
}
  • sort的select.cpp
#include<iostream>
using namespace std;
void print1(int a[], int n)
{for(int j= 0; j<n; j++){cout<<a[j] <<"  ";}cout<<endl;
}void select(int a[], int len)
{int minindex, temp;for(int i = 0; i<len-1;i++){minindex = i;for(int j = i+1; j<len; j++){if(a[j]<a[minindex])minindex = j;}temp = a[i];a[i] = a[minindex];a[minindex] = temp;}
}

三、include文件夹  

  • calc.h
#ifndef _CALC_H
#define _CALC_H
#include <iostream>
using namespace std;
// 加法
int add(int a, int b);
// 减法
int subtract(int a, int b);
// 乘法
int multiply(int a, int b);
// 除法
double divide(int a, int b);
#endif
  • sort.h
#ifndef _SORT_H
#define _SORT_H#include <iostream>
using namespace std;// 插入排序
void print(int a[], int n);
void insert(int a[], int n);// 选择排序
void print1(int a[], int n);
void select(int a[], int len);
#endif

四、test1文件夹  

  • calc.cpp
#include <stdio.h>
#include "calc.h"int main()
{int a = 20;int b = 12;printf("a = %d, b = %d\n", a, b);printf("a + b = %d\n", add(a, b));printf("a - b = %d\n", subtract(a, b));printf("a * b = %d\n", multiply(a, b));printf("a / b = %f\n", divide(a, b));return 0;
}

五、test2文件夹 ​​​​​​​ 

  • sort.cpp
#include "sort.h"
#include <iostream>
using namespace std;
int  main()
{int a[10] = {8,1,9,7,2,4,5,6,10,3};insert(a,10);cout<<"插入排序结果:";print(a,10);select(a, 10);cout << "选择排序结果: ";print1(a, 10);
}

六、添加CMakeLists.txt

1.在calc文件夹中添加CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(calc)# 搜索源文件
aux_source_directory(./ SRC)
include_directories(${HEADPATH}) # 头文件路径 HEADPATHset(LIBRARY_OUTPUT_PATH ${LIBPATH}) # 库生成的路径 LIBPATH
add_library(${CALCLIB} STATIC ${SRC}) # 生成静态库

2. 在test1文件夹中添加CMakeLists.txt 

cmake_minimum_required(VERSION 3.10)
project(test1)aux_source_directory(./ SRC)
include_directories(${HEADPATH})set(EXECUTABLE_OUTPUT_PATH ${EXECPATH})# 包含静态库路径
link_directories(${LIBPATH})
# 链接静态库, calc为静态库的名字
link_libraries(${CALCLIB})add_executable(${APPNAME1} ${SRC})

3.在sort文件夹中添加CMakeLists.txt 

cmake_minimum_required(VERSION 3.10)
project(sort)# 搜索源文件
aux_source_directory(./ SRC)
include_directories(${HEADPATH}) # 头文件路径 HEADPATHset(LIBRARY_OUTPUT_PATH ${LIBPATH}) # 库生成的路径 LIBPATH
add_library(${SORTLIB} STATIC  ${SRC}) # 生成静态库

4. 在test2文件夹中添加CMakeLists.txt 

cmake_minimum_required(VERSION 3.10)
project(test2)aux_source_directory(./ SRC)
include_directories(${HEADPATH})set(EXECUTABLE_OUTPUT_PATH ${EXECPATH})# 包含静态库路径
link_directories(${LIBPATH})
# 链接静态库, calc为静态库的名字
link_libraries(${SORTLIB})add_executable(${APPNAME2} ${SRC}) 

5. 在该项目的根目录中添加CMakeLists.txt 

cmake_minimum_required(VERSION 3.10)
project(test)
# 定义变量# 库生成的路径
set(LIBPATH ${PROJECT_SOURCE_DIR}/lib)# 可执行程序的存储目录(测试程序生成的路径)
set(EXECPATH ${PROJECT_SOURCE_DIR}/bin)# 头文件路径
set(HEADPATH ${PROJECT_SOURCE_DIR}/include)# 库文件的名字
set(CALCLIB calc)
set(SORTLIB sort)# 可执行程序的名字
set(APPNAME1 app1)
set(APPNAME2 app2)# 给当前节点添加子目录
add_subdirectory(calc)
add_subdirectory(sort)
add_subdirectory(test1)
add_subdirectory(test2)

执行命令:
1.mkdir build
2.cd build
3.cmake ..
4.make
5.cd ../bin
6. ./app1
7. ./app2执行结果:
heheda@linux:~/Linux/multi-v1$ mkdir build
heheda@linux:~/Linux/multi-v1$ cd build
heheda@linux:~/Linux/multi-v1/build$ cmake ..
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/heheda/Linux/multi-v1/build
heheda@linux:~/Linux/multi-v1/build$ make
Scanning dependencies of target calc
[  8%] Building CXX object calc/CMakeFiles/calc.dir/add.cpp.o
[ 16%] Building CXX object calc/CMakeFiles/calc.dir/div.cpp.o
[ 25%] Building CXX object calc/CMakeFiles/calc.dir/mult.cpp.o
[ 33%] Building CXX object calc/CMakeFiles/calc.dir/sub.cpp.o
[ 41%] Linking CXX static library ../../lib/libcalc.a
[ 41%] Built target calc
Scanning dependencies of target sort
[ 50%] Building CXX object sort/CMakeFiles/sort.dir/insert.cpp.o
[ 58%] Building CXX object sort/CMakeFiles/sort.dir/select.cpp.o
[ 66%] Linking CXX static library ../../lib/libsort.a
[ 66%] Built target sort
Scanning dependencies of target app1
[ 75%] Building CXX object test1/CMakeFiles/app1.dir/calc.cpp.o
[ 83%] Linking CXX executable ../../bin/app1
[ 83%] Built target app1
Scanning dependencies of target app2
[ 91%] Building CXX object test2/CMakeFiles/app2.dir/sort.cpp.o
[100%] Linking CXX executable ../../bin/app2
[100%] Built target app2
heheda@linux:~/Linux/multi-v1/build$ cd ../bin
heheda@linux:~/Linux/multi-v1/bin$ ./app1
a = 20, b = 12
a + b = 32
a - b = 8
a * b = 240
a / b = 1.666667
heheda@linux:~/Linux/multi-v1/bin$ ./app2
插入排序结果:1  2  3  4  5  6  7  8  9  10  
选择排序结果: 1  2  3  4  5  6  7  8  9  10  
heheda@linux:~/Linux/multi-v1/bin$ 

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

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

相关文章

Mnajora 使用deb包安装软件

说明 Mnajora 安装deb软件包主要有两种方式 可以使用dpkg 直接安装也可是使用debtap将deb软件包转换成 使用dpkg sudo pacman -S dpkg #安装dpkgsudo dpkg -i ###.deb #使用dpkg安装deb软件包和在ubuntu上是一样的 安装成功 使用debtap debtap是一个用于将.deb包转换为A…

im6ull学习总结(三-3)freetype

1、Freetype简介 FreeType是一个开源的字体渲染引擎&#xff0c;主要用于将字体文件转换为位图或矢量图形&#xff0c;并在屏幕上渲染出高质量的字体。它提供了一组API&#xff0c;使开发者能够在自己的应用程序中使用和呈现字体。 FreeType最初是作为一个独立项目开发的&…

07-Tomcat运行Jenkins并实现链路追踪

4.3.1&#xff1a;部署skywalking java agent ~# apt install openjdk-11-jdk -y ~# cd /apps/ ~# wget https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz ~# tar xf apache-skywalking-java-agent-9.0.0.tgz ~# vim /ap…

Git的安装

1、下载 官网地址&#xff1a; https://git-scm.com/或https://github.com/git-for-windows/git/releases 百度网盘链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/13_asGO-XQb5KWWH_V7rq6g?pwd0630 2、安装 ①查看GNU协议&#xff0c;可以直接点击下一步。 ②…

橘子学Spring01之spring的那些工厂和门面使用

一、Spring的工厂体系 我们先来说一下spring的工厂体系(也称之为容器)&#xff0c;得益于大佬们对于单一职责模式的坚决贯彻&#xff0c;在十几年以来spring的发展路上&#xff0c;扩展出来大量的工厂类&#xff0c;每一个工厂类都承担着自己的功能(其实就是有对应的方法实现)…

Linux 期末复习

Linux 期末复习 计算机历史 硬件基础 1&#xff0c;计算机硬件的五大部件&#xff1a;控制器、运算器、存储器、输入输出设备 2&#xff0c;cpu分为精简指令集(RISC)和复杂指令集(CISC) 3&#xff0c;硬件只认识0和1&#xff0c;最小单位是bit&#xff0c;最小存储单位是字…

【论文阅读】Non-blocking Lazy Schema Changes in Multi-Version

Non-blocking Lazy Schema Changes in Multi-Version Database Management Systems 1. Intro 1.1 Motivation 一个是online能够提供不停机的更新的能力&#xff0c;在很多业务系统里面是必要的。第二个是满足高可用&#xff0c;SaaS、PaaS要提供高可用的系统给用户&#xff…

【Linux实用篇】Linux常用命令(1)

目录 1.1 Linux命令初体验 1.1.1 常用命令演示 1.1.2 Linux命令使用技巧 1.1.3 Linux命令格式 1.2 文件目录操作命令 1.2.1 ls 1.2.2 cd 1.2.3 cat 1.2.4 more 1.2.5 tail 1.2.6 mkdir 1.2.7 rmdir 1.2.8 rm 1.1 Linux命令初体验 1.1.1 常用命令演示 在这一部分中…

openssl3.2 - 官方demo学习 - cms - cms_ver.c

文章目录 openssl3.2 - 官方demo学习 - cms - cms_ver.c概述运行结果笔记END openssl3.2 - 官方demo学习 - cms - cms_ver.c 概述 CMS验签, 将单独签名和联合签名出来的签名文件都试试. 验签成功后, 将签名数据明文写入了文件供查看. 也就是说, 只有验签成功后, 才能看到签名…

如何在你的网站接入QQ登录?

文章目录 准备阶段申请QQ登录的权限创建应用最后上传qqlogin.php代码 准备阶段 国内服务器和备案域名需要你有张独一无二本人的身份证你正面手持身份证的图片一张100px*100px的网站图标 申请QQ登录的权限 首先访问qq互联&#xff0c;点击我直接访问 登陆完成后我们点击面的…

常用计算电磁学算法特性与电磁软件分析

常用计算电磁学算法特性与电磁软件分析 参考网站&#xff1a; 计算电磁学三大数值算法FDTD、FEM、MOM ADS、HFSS、CST 优缺点和应用范围详细教程 ## 基于时域有限差分法的FDTD的计算电磁学算法&#xff08;含Matlab代码&#xff09;-框架介绍 参考书籍&#xff1a;The finite…

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II 文章目录 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II1 Le…

软件测试|教你使用Python绘制正多边形

简介 绘制正多边形是Python图形编程的基本任务之一。在本文中&#xff0c;我将为你提供一个使用Python绘制正多边形的详细教程&#xff0c;并提供一个示例代码。我们将使用Python的Turtle库来进行绘制。 步骤1&#xff1a;导入Turtle库 我们需要先安装好Python环境&#xff…

【信息安全】深度分析邮件安全及钓鱼攻击防范

本博文共计3100余字&#xff0c;预计需阅读20分钟 【邮件安全建设】 一、前言 邮件系统作为企业办公网络架构中重要的组成部分&#xff0c;同时也是业务高频使用的办公应用&#xff0c;一旦出现安全问题&#xff0c;业务将会被严重干扰甚至中断&#xff0c;本篇博客通过攻守两…

软件测试|Python数据可视化神器——pyecharts教程(十)

使用pyecharts绘制漏斗图 简介 漏斗图&#xff08;Funnel Chart&#xff09;是一种用于可视化数据流程或转化率的图表类型。它通常由一系列阶段组成&#xff0c;每个阶段都有一个名称和一个值&#xff0c;表示在该阶段的转化量或数据流程的进展情况。漏斗图的名称来源于其外观…

浅析五种 React 组件设计模式

作为一名 React 开发者&#xff0c;你可能会面临下面几个问题&#xff1a; 如何构建一个高复用度性的组件&#xff0c;使其适应不同的业务场景&#xff1f;如何构建一个具有简单 API的组件&#xff0c;使其易于使用&#xff1f;如何构建一个在 UI 和功能方面具有可扩展性的组件…

[C#]使用winform部署PP-MattingV2人像分割onnx模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleSeg 【算法介绍】 PP-MattingV2是一种先进的图像和视频抠图算法&#xff0c;由百度公司基于PaddlePaddle深度学习框架开发。它旨在提供更精准和高效的图像分割功能&#xff0c;特别是在处理图像中的细微部分&#xf…

set -e的作用

今天看人家代码看到一个很有意思的命令 后面我搜索了一下&#xff0c;感觉还是很好用的 set -e 是一个调试用的好东西 比如test.sh echo "执行第一个命令" cd /aaa/bbb echo "执行第二个命令"结果如下 可以看到第二个命令是执行了&#xff0c;虽然我的第…

利用C语言实现输出杨辉三角的前10行

杨辉三角的特点 第一列都为1&#xff0c;对角线为1 第x行第x列为1 第几行就有几个元素 从第三行开始,第二列的元素等于第二行的第一列元素第二列元素之和(排除从第三行开始的首和尾元素) //用C语言实现打印出10行杨辉三角 #include<stdio.h>int main(){int a[10][10];//…

使用RNN完成IMDB电影评论情感分析

使用RNN完成IMDB电影评论情感分析 任务描述一、环境设置二、数据准备2.1 参数设置2.2 用padding的方式对齐数据2.3 用Dataset与DataLoader加载三、模型配置四、模型训练五、模型评估六、模型预测 任务描述 本示例教程演示如何在IMDB数据集上使用RNN网络完成文本分类的任务。IM…