跨平台编译工具cmake的简单使用

2023-08-14 11:25:03 来源:玩转单片机

在使用不同平台的电脑时,使用的编译也会不一样,如果想把一个项目在不同平台下编译,那有什么方式可以实现这样的需求呢,这就是这篇文章就来介绍其中的一种方式,就是使用cmake,cmake 并不直接建构出最终的软件,而是产生标准的建构档,然后再借助编译工具来构建。

| 环境搭建

在windows可以使用cmake+vscode+mingw配合使用构建,还需要把mingw32-make.exe,复制一份,将其中一份重命名为make.exe,以实现在不同平台下可以直接使用make指令。在ubuntu中可以使用cmake+vscode+gcc来构建,ubuntu一般会自带gcc。vscode需要安装几个相关插件:


(相关资料图)

C/C++CMakeCMakeTools

可以通过cmake --version 来查看是否安装成功,相关的安装直接百度以下就可以;注意不同平台下使用的命令可能会有差别,笔者使用的是ubuntu系统来操作。

| 简单使用

同目录单文件

1、先看文件树

main.c源码文件

#include"stdio.h"intmain(){printf("ok");return0;}

CMakeLists.txt配置文件

#CMake最低版本号要求cmake_minimum_required(VERSION2.8)#项目信息project(Demo1)#指定生成目标add_executable(Demomain.c)

2、构建Makefile文件

创建好文件夹后,再进入build文件夹, 使用 cmake .. 命令构建Makefile文件:

3、通过gcc编译

在Makefile同级目录下使用 make 命令编译,就会生成一个可执行文件Demo文件:

4、执行可执行文件

同目录多文件

1、编写文件

在上边的基础上,把生成的文件删除,再添加两个文件:

main.c源码文件

#include"stdio.h"#include"hello.h"intmain(){printf("ok");hello();return0;}

hello.c源码文件

#include"hello.h"voidhello(void){printf("hello");}

hello.h源码文件

#ifndef__HELLO__#define__HELLO__#include"stdio.h"voidhello(void);#endif

CMakeLists.txt配置文件(使用方式二):

方式一:通过手动指定源码文件

#CMake最低版本号要求cmake_minimum_required(VERSION2.8)#项目信息project(Demo1)#指定生成目标add_executable(Demomain.chello.c)

方式二:查找当前目录下的所有源文件

#CMake最低版本号要求cmake_minimum_required(VERSION2.8)#项目信息project(Demo1)#查找当前目录下的所有源文件#并将名称保存到DIR_SRCS变量aux_source_directory(.DIR_SRCS)#指定生成目标(自动查找)add_executable(Demo${DIR_SRCS})

2、构建Makefile文件

3、生成可执行文件

不同目录多文件

不同目录下的处理,就是把文件编译成库,再在对应位置链接进去。

1、先看文件树

main.c 和 hello.c 和hello.h都可同目录多文件案例源码一样。

顶层的CMakeLists.txt配置:

#CMake最低版本号要求cmake_minimum_required(VERSION2.8)#项目信息project(Demo3)#查找当前目录下的所有源文件#并将名称保存到DIR_SRCS变量aux_source_directory(.DIR_SRCS)#添加hello子目录add_subdirectory(hello)#指定生成目标add_executable(Demomain.c)#添加链接库target_link_libraries(DemoHelloFunctions)

hello文件夹中的CMakeLists.txt配置:

#查找当前目录下的所有源文件#并将名称保存到DIR_LIB_SRCS变量aux_source_directory(.DIR_LIB_SRCS)#生成链接库add_library(HelloFunctions${DIR_LIB_SRCS})

2、构建Makefile文件

3、生成可执行文件

文件的路径一定要是写对,不然编译会出问题:

正确的写法如下:

执行可执行文件:

这就是cmake的简单用法,可以根据自己需求进行深入学习。

审核编辑:汤梓红

标签:

上一篇:雷电浪涌和过压保护实例分析
下一篇:最后一页