当前位置: 首页 > article >正文

CMAKE的使用

视频路径:

https://www.bilibili.com/video/BV14s4y1g7Zj/?spm_id_from=333.337.search-card.all.click&vd_source=b3723521e243814388688d813c9d475f
https://subingwen.cn/cmake/CMake-primer/

1.最简单的CMakeLists
1.1代码:
add.cpp

#include <stdio.h>
#include "head.h"

int add(int a, int b)
{
    return a+b;
}

div.cpp

#include <stdio.h>
#include "head.h"

double divide(int a, int b)
{
    return (double)a/b;
}


main.cpp

#include <stdio.h>
#include "head.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;
}

mult.cpp

#include <stdio.h>
#include "head.h"

int multiply(int a, int b)
{
    return a*b;
}

sub.cpp

#include <stdio.h>
#include "head.h"

// 你好
int subtract(int a, int b)
{
    return a-b;
}


head.h

#ifndef _HEAD_H
#define _HEAD_H
// 加法
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


CMakeLists.txt

#这是一个CmakeLists.txt文件
#[[这是多行注释
]]

#指定出要求的最低Cmake版本
cmake_minimum_required(VERSION 3.0)
project(test)
add_executable(app add.cpp div.cpp main.cpp mult.cpp sub.cpp)

1.2执行步骤

首先,创建build目录,
在build目录中执行cmake .. 命令,
然后执行make命令,
会产生目标app。

问题:add_executable中的第二个参数太长了,怎么办?
将这些内容存在变量中

2.第二小节
2.1 通过set定义变量
2.2设置C++标准,如C++11 C++14 C++17 C++20; 通过CMKAE_CXX_STANDARD = 11/14/17/20
2.3通过set给生成可执行文件设置路径,

set{HOME /home/robin/Linux/Sort}
set{EXECUTABLE_OUTPUT_PATH ${PATH}/bin}

3.第三小节
在这里插入图片描述

#version 1.1
#在1.1的基础上将add_executable第二个变量中的元素存储在变量中
#设置Cmake版本
cmake_minimum_required(VERSION 3.31)
project(test)
#设置变量来存储这些.cpp文件
set(SRC_LIST add.cpp div.cpp main.cpp mult.cpp sub.cpp)
//设置可执行文件路径,如果路径不存在,则会创建这个路径
set(EXECUTABLE_OUTPUT_PATH /home/book/aa/bb/cc)
//设置C++标准为C++11
set(CMAKE_CXX_STANDARD 11)
add_executable(app ${SRC_LIST})

也可以在后边cmake的时候指定C++标准

cmake .. -DCMAKE_CXX_STANDARD=11

在这里插入图片描述

4.第四小节
搜索文件夹中的文件
方式1:

# 其中${PROJECT_SOURCE_DIR} 代表
# 的是cmake 后边指定的那个路径,
# 将这个文件夹中的文件存储到SRC中
aux_source_directory(${PROJECT_SOURCE_DIR} SRC)

在这里插入图片描述
方式2:

#这里后边要指定文件的后缀, .cpp
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
cmake_minimum_required(VERSION 3.31)
project(test)
#PROJECT_SOURCE_DIR 代表执行Cmake时候后边跟随的命令
#aux_source_directory(${PROJECT_SOURCE_DIR} SRC)
#set(SRC_LIST add.cpp div.cpp main.cpp mult.cpp sub.cpp)
#CMAKE_CURRENT_SOURCE_DIR 代表的是CMakeLists.txt文件所在目录中的文件
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
set(EXECUTABLE_OUTPUT_PATH /home/book/aa/bb/cc)
set(CMAKE_CXX_STANDARD 11)
add_executable(app ${SRC})

在这里插入图片描述

5.第五小节
分文件编写
在这里插入图片描述
在这里插入图片描述
但是会出现问题:找不到头文件
在这里插入图片描述
使用include_directories() 解决

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

6.将当前项目中的文件编译成库文件(动态库和静态库)
在这里插入图片描述
通过这四个文件制作运算库,命令为

add_library()

在这里插入图片描述
6.1静态库的制作
在这里插入图片描述

6.2动态库的制作

#version 1.5
#动态库的制作
cmake_minimum_required(VERSION 3.31)
project(test)
#PROJECT_SOURCE_DIR 代表执行Cmake时候后边跟随的命令
#aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)
#set(SRC_LIST add.cpp div.cpp main.cpp mult.cpp sub.cpp)
#CMAKE_CURRENT_SOURCE_DIR 代表的是CMakeLists.txt文件所在目录中的文件
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
#set(EXECUTABLE_OUTPUT_PATH /home/book/aa/bb/cc)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
set(CMAKE_CXX_STANDARD 11)
#add_executable(app ${SRC})
add_library(calc STATIC ${SRC})

在这里插入图片描述

6.3库的使用
发布的时候要发布库文件和头文件
指定生成的库文件的路径

set(LIBRARY_OUTPUT_PATH /home/book/nfs_rootfs/CSDN/abcdefg)
#version 1.5
#动态库的制作
cmake_minimum_required(VERSION 3.31)
project(test)
#PROJECT_SOURCE_DIR 代表执行Cmake时候后边跟随的命令
#aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)
#set(SRC_LIST add.cpp div.cpp main.cpp mult.cpp sub.cpp)
#CMAKE_CURRENT_SOURCE_DIR 代表的是CMakeLists.txt文件所在目录中的文件
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
#set(EXECUTABLE_OUTPUT_PATH /home/book/aa/bb/cc)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
set(CMAKE_CXX_STANDARD 11)
#add_executable(app ${SRC})
#add_library(calc STATIC ${SRC})
add_library(calc SHARED ${SRC})
set(LIBRARY_OUTPUT_PATH /home/book/nfs_rootfs/CSDN/abcdefg)

在这里插入图片描述

7.在程序中链接静态库
在这里插入图片描述
在这里插入图片描述

#version 1.5
#动态库的制作
cmake_minimum_required(VERSION 3.31)
project(test)
#PROJECT_SOURCE_DIR 代表执行Cmake时候后边跟随的命令
#aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)
#set(SRC_LIST add.cpp div.cpp main.cpp mult.cpp sub.cpp)
#CMAKE_CURRENT_SOURCE_DIR 代表的是CMakeLists.txt文件所在目录中的文件
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
#set(EXECUTABLE_OUTPUT_PATH /home/book/aa/bb/cc)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
set(CMAKE_CXX_STANDARD 11)
#add_executable(app ${SRC})
#add_library(calc STATIC ${SRC})
#add_library(calc SHARED ${SRC})
#set(LIBRARY_OUTPUT_PATH /home/book/nfs_rootfs/CSDN/abcdefg)
link_libraries(calc)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib1)
add_executable(app ${SRC})

视频看到这里了
在这里插入图片描述


http://www.kler.cn/a/419557.html

相关文章:

  • 【C语言】结构体嵌套
  • webpack5开发环境、生产环境配置 (三)
  • 前端通用Axios 请求拦截配置
  • 多级缓存设计实践
  • 【MySQL】创建数据库、用户和密码
  • 鸿蒙开发:自定义一个任意位置弹出的Dialog
  • 数字经济发展的新视角:数字产业化、数据资产化、产业数字化与数据产业
  • 详解LinkedList中的底层实现
  • 2411rust,1.83
  • SpringBoot集成Milvus|(实现向量的存储和查询)
  • go使用mysql实现增删改查操作
  • 【大数据技术基础 | 实验十四】Kafka实验:订阅推送示例
  • WPS for Mac免登录使用工具栏
  • 使用Dubbo: 创建基于Spring Boot的微服务应用
  • c++:string类
  • 网络安全防护指南
  • 《Python 视频格式转换全攻略》
  • HOG(Histogram of Oriented Gradients)特征提取原理及应用场景
  • 医院管理系统
  • 为什么爱用低秩矩阵
  • 题目 1013: [编程入门]Sn的公式求和
  • 设计模式:14、抽象工厂模式(配套)
  • 高校心理教育辅导系统
  • C#使用Graphics、Pen 和 Brush 类进行2D图形绘制
  • 汽车IVI中控OS Linux driver开发实操(二十七):常用Linux指令
  • [2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(4))