初探cmake

本文通过一个简单的示例对比了CMake与Make的区别,介绍了CMake作为跨平台构建工具的优势,尤其适用于多平台软件项目的构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   今天要尝试编译一下opencv,发现并不是用我熟悉的makefile来编译的,网上查阅了一下资料发现原来需要用到cmake这款工具,貌似和make只差一个字母的东东为什么opencv要用呢,这让我十分好奇,经过了查询,发现还是二者有一定的区别的。

  

Make(或者说一个Makefile)是构建系统 - 它驱动编译器和其它构建工具来构建你的代码。
“Make”是一个工具,它控制可执行文件和程序的源文件以及程序的其他非源文件的生成。


CMake的是构建系统的生成器,CMake代表跨平台Make。它可以产生Makefile文件,它可以产生Ninja构建文件,它可以产生KDevelop或XCode的项目,它能产生Visual Studio解决方案。从同一个CMakeLists.txt文件来产生项目。如果你正在编写需要在很多不同的平台上构建的软件那么CMake的往往是一个不错的选择。

经过初步尝试之后,我发现cmake相当与make的上一的加工,cmake加工好的东西其中之一就是makefile,然后经过make的加工我们可爱的文件就变成了可执行得程序

这就好比我们在收小麦,以前我们只能自己锄头收割小麦,然后把小麦的皮弄下来,之后给工厂加工处理成为面粉,但是我们现在有了收割机,大幅度的增加了我们的收割效率而这就好比cmake给我们带来的便捷:以前我们都是去手写一个makefile文件,但是有了cmake,我们就可以略去些makefile文件,只需要写一些文件之间的关系只把"小麦种进去,然后就可以开着现代化设备收割了"

口说无凭,来一段代码尝试一下

目录结构:

                        | - include ---   a.h

test_cmake - | - src         ---    a.c /  main.c

                        | - CmakeLists.txt

//  test_cmake/include/a.h
#ifndef A_H
#define A_H
#include <math.h>

double get_sqrt(double val);

#endif


//   test_cmake/src/a.c
#include "../include/a.h"

double get_sqrt(double val)
{
    return sqrt(val);
}

//   test_cmake/src/main.c
#include <stdio.h>
#include "../include/a.h"

int main()
{
    double b = 25.0;
    double a = 0.0;

    a = get_sqrt(b);
    printf("a is %lf, b is %lf\n", a, b);

    return 0;
}
这个代码实现的东西很简单,就是一个求根。

下面我们就需要写一下文件的依赖关系了

# test_cmake/CMakeLists.txt
#头文件所在的目录
INCLUDE_DIRECTORIES(include)
#源文件所在的目录,并且把src这个值赋给DIR_SRCS
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#赋值
SET(LIBRARIES
    libm.so
    )
#得到可执行文件bin
ADD_EXECUTABLE(./bin ${DIR_SRCS})
#需要的库
TARGET_LINK_LIBRARIES(./bin ${LIBRARIES})
1.声明一下头文件的目录

2.声明源文件的目录

3.把需要的库的名字赋值给一个变量

4.可执行文件的名字和需要的源文件

5.需要的链接库

这样就可以了,:wq保存退出之后直接在命令行输入cmake.就可以创建出makefile文件和一些其他的文件了

之后在make就可以创建出可执行文件了

这是目前我所了解到的一些很基础的关于cmake用法,希望以后可以了解更多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值