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

嵌入式技术

1368人已加入

描述

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

| 环境搭建

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

 

C/C++
CMake
CMake Tools

 

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

| 简单使用

同目录单文件

1、先看文件树

CMake

main.c源码文件

 

#include "stdio.h"

int main()
{
    printf("ok
");
    return 0;
}

 

CMakeLists.txt配置文件

 

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Demo1)

# 指定生成目标
add_executable(Demo main.c)

 

2、构建Makefile文件

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

CMake

3、通过gcc编译

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

CMake

4、执行可执行文件

CMake

同目录多文件

1、编写文件

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

CMake

main.c源码文件

 

#include "stdio.h"
#include "hello.h"

int main()
{
    printf("ok
");
    hello();
    return 0;
}

 

hello.c源码文件

 

#include "hello.h"

void hello(void)
{
    printf("hello
");
}

 

hello.h源码文件

 

#ifndef __HELLO__
#define __HELLO__

#include "stdio.h"

void hello(void);

#endif

 

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

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

 

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Demo1)

# 指定生成目标
add_executable(Demo main.c hello.c)

 

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

 

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Demo1)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标(自动查找)
add_executable(Demo ${DIR_SRCS})

 

2、构建Makefile文件

CMake

3、生成可执行文件

CMake

不同目录多文件

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

1、先看文件树

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

CMake

顶层的CMakeLists.txt配置:

 

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Demo3)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 添加 hello 子目录
add_subdirectory(hello)

# 指定生成目标 
add_executable(Demo main.c)

# 添加链接库
target_link_libraries(Demo HelloFunctions)

 

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

 

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)

# 生成链接库
add_library (HelloFunctions ${DIR_LIB_SRCS})

 

2、构建Makefile文件

CMake

3、生成可执行文件

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

CMake

正确的写法如下:

CMake

执行可执行文件:

CMake

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

 审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分