首页 > 其他分享 >CMAKE 《多模块例子》

CMAKE 《多模块例子》

时间:2024-08-01 17:42:58浏览次数:17  
标签:sort set const int add 例子 模块 CMAKE include

概述

生成sort\calc的静态库,并生成app1.exe app2.exe

目录结构

image

CMakeLists.txt 位置以及配置

根CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(mulitiple_modules)
set(CMAKE_CXX_STANDARD 17)
# define variables
# LIBPATH 库存储位置
set(LIBPATH ${PROJECT_SOURCE_DIR}/lib)
# EXECPATH 可执行文件位置 
set(EXECPATH ${PROJECT_SOURCE_DIR}/bin)
# HEADER 头文件存储位置
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)

calc目录下CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(sub_modules_calc)
set(CMAKE_CXX_STANDARD 17)
# 搜索源文件
aux_source_directory(./ SRC)
# 搜索头文件
include_directories(${HEADPATH})
# 生成动态库位置
set(LIBRARY_OUTPUT_PATH ${LIBPATH})
# 生成动态库
add_library(${CALCLIB} STATIC ${SRC})

sort目录下CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(sub_modules_sort)
set(CMAKE_CXX_STANDARD 17)
# 搜索源文件
aux_source_directory(./ SRC)
# 搜索头文件
include_directories(${HEADPATH})
# 生成动态库位置
set(LIBRARY_OUTPUT_PATH ${LIBPATH})
# 生成动态库
add_library(${SORTLIB} STATIC ${SRC})

test1目录下CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(sub_modules_test1)
set(CMAKE_CXX_STANDARD 17)
# 搜索源文件
aux_source_directory(./ SRC)
# 搜索头文件
include_directories(${HEADPATH})
# 可执行文件位置
set(EXECUTABLE_OUTPUT_PATH ${EXECPATH})
# 链接静态库
link_directories(${LIBPATH})
link_libraries(${CALCLIB})
add_executable(${APPNAME1} ${SRC})

test2目录下CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(sub_modules_test2)
set(CMAKE_CXX_STANDARD 17)
# 搜索源文件
aux_source_directory(./ SRC)
# 搜索头文件
include_directories(${HEADPATH})
# 可执行文件位置
set(EXECUTABLE_OUTPUT_PATH ${EXECPATH})
# 链接静态库
link_directories(${LIBPATH})
link_libraries(${SORTLIB})
add_executable(${APPNAME2} ${SRC})

在跟目录下新建build

mkdir build
cd build
# 生成makefiel
cmake .. 
# 生成静态库,exe
make

源代码

include/m_calc.h

#ifndef M_CALC_H
#define M_CALC_H

#ifdef __cplusplus
extern "C" {
#endif

 int m_add(const int a,const int b);
 int m_div(const int a,const int b);
 int m_mult(const int a,const int b);
 int m_sub(const int a,const int b);
#ifdef __cplusplus
}
#endif

#endif

include/m_sort.h


#ifndef M_SORT_H
#define M_SORT_H
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#ifdef __cplusplus
extern "C"{
#endif
void m_sort(vector<int> &v);
void m_insert(vector<int> &v,const int i);
#ifdef __cplusplus
}
#endif
#endif

calc/m_calc.cpp

#include "m_calc.h"
int m_add(const int a,const int b){
    return a+b;
}
 int m_div(const int a,const int b){
    return a-b;
 }
int m_sub(const int a,const int b){
    return a/b;
}

 int m_mult(const int a,const int b){
    return a*b;
 }

sort/m_sort.cpp

#include "m_sort.h"

void m_sort(vector<int> &v)
{
    sort(v.begin(),v.end(),[](int a,int b)->bool{return a>b;}); 
}
void m_insert(vector<int> &v,const int i)
{
    v.push_back(i);
}

test1/test1.cpp

#include<iostream>
#include"m_calc.h"
using namespace std;
int main(){
    cout<<"test1"<<endl;
    cout<<m_add(2,2)<<endl;
    cout<<m_div(10,5)<<endl;
    cout<<m_mult(3,3)<<endl;
    cout<<m_sub(9,3)<<endl;
    return 0;
}

test2/test1.cpp

#include"m_sort.h"

void print_vector(vector<int> &v){
    for (size_t i = 0; i < v.size(); i++)
    {
        cout<<v[i]<<" ";
    }
    cout<<endl;
}
int main(){
    vector<int> v;
    for (size_t i = 0; i < 50; i++)
    {
        m_insert(v,i);
    }
    print_vector(v);
    m_sort(v);
    print_vector(v);
    return 0;
}

标签:sort,set,const,int,add,例子,模块,CMAKE,include
From: https://www.cnblogs.com/paylove/p/18337129

相关文章

  • webservice 的参考例子 sample
    一、参考https://blog.csdn.net/Ikaros_521/article/details/103232677二、hello.hh__hello(char*&);三、//helloclient.cpp#include"soapH.h"#include"h.nsmap"intmain(){char*s;structsoap*soap=soap_new();so......
  • 前端模块化
    前端工程化、模块化CommonJS模块标准导出使用语法:module.exports={}/变量(exports.变量=)导入使用语法:require('模块名或路径');utils例子node中使用,以router和处理函数为例node中使用,以router处理函数为例ECMAScript标准默认导出和导入命名导出和导入以请求拦截......
  • magisk模块 实现app 保活
    #!/system/bin/shMODDIR=${0%/*}while["$(getpropsys.boot_completed)"!="1"];dosleep1doneecho"PowerManagerService.noSuspend">/sys/power/wake_locktargetTime="4"targetTime2="16......
  • 《DNK210使用指南 -CanMV版 V1.0》第十六章 machine模块实验
    第十六章machine模块实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点......
  • 分享LVGL v9移植到imx6ull的过程(CMake)
    最近在做一个用cmake构建的项目需要用到LVGL,但是找资料的时候发现很少有分享v9的移植,自己移植也踩了很多坑所以决定分享一下移植过程。1.LVGL获取gitclonehttps://github.com/lvgl/lv_port_linux.gitgit之后发现这个包的lvgl文件夹里面是空的gitclonehttps://github.......
  • 费曼积分法——以一个简单的例子讲解
    今天又又又刷到一个视频,很想睡觉(昨晚熬了个大夜),但是又临近午饭不能睡,只能水篇随笔来打发时间了。什么是费曼积分法?先看看官方解释:费曼积分法(Feynmanintegral)是一种求解复变函数定积分的计算方法,由理查德·费曼(RichardP.Feynman)提出。这种方法特别适用于处理物理学中的路径积......
  • 61.BeautifulSoup模块
    BeautifulSoup模块【一】初识1)介绍BeautifulSoup是python的一个库最主要的功能是从网页抓取数据。官方文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#安装pipinstallBeautifulSoup4#导入frombs4importBeautifulSoup2)HTML解析器解析当前页面生成......
  • 60.requests模块
    【一】爬虫初识1)概念爬虫是一种自动化获取互联网数据的技术,通过模拟浏览器行为,向目标网站发送请求并获取响应,然后解析响应中的数据2)工作原理发送HTTP请求,模拟浏览器行为,获取网站的响应,并解析响应中的数据3)分类通用爬虫:对整个互联网进行爬取定向爬虫:只针对特定的网站进......
  • ansible常用模块
    ansible常见模块setup#收集远程主机的Facts(每个被管理节点在接收运行管理命令之前,会将自己主机相关信息,如操作系统,IP等信息传递给ansible主机)filter:用于进行条件过滤,如果设置,仅返回匹配过滤条件的信息ansiblehosts1-msetupansiblehosts1-msetup-a"filter=ansibl......
  • CMAKE 《window构建项目》
    安装参考链接https://subingwen.cn/https://subingwen.cn/cmake/CMake-primer/cmakehttps://cmake.org/download/下载根据需求安装合适的版本mingw64https://www.mingw-w64.org/下载根据需求安装合适的版本https://sourceforge.net/projects/mingw-w64/files/mi......