cmake入门

本文详细介绍CMake工具的基础使用方法,包括如何通过简单的语句描述不同平台的编译过程,实现从单一源文件到多目录源码的编译。通过实例演示,读者将学会如何设置工程名称、编译简单的HelloWorld程序、处理多目录源码编译,并掌握如何利用CMakeLists.txt文件生成Makefile进行代码编译。

CMake是一个跨平台的编译工具,可以用简单的语句来描述个平台的编译过程。使用cmake 来编译代码十分简单,方便,cmake是一个生成编译脚本的工具,在linux 它会生成对应的makefile文件,然后调用makefile来编译代码。

1、编译一个简单的打印hello world程序

main.c的内容很简单,就是打印hello world

#include <stdio.h>
#include <string.h>

int main()
{
    printf("hello world!\n");
    return 0;
}

CMakeLists.txt  里面的内容也很简单,相应的注释已经贴在文件里面

# 设置工程的名称
PROJECT(ProjTest)

# 变量SRCS保存当前目录下所有的源码文件 . 代表当前目录
AUX_SOURCE_DIRECTORY(. SRCS)

#用SRCS指定的源码文件编译出可执行程序ProjTest
ADD_EXECUTABLE(ProjTest ${SRCS})

我个人的习惯是在工程目录下建立一个build 目录,进入到build 目录后执行cmake ..

执行cmake ..  后,cmake 工具会到上一层目录,也就是test_1目录下找CMakeLists.txt 来生成对应的Makefile 

这时候再执行make 就会编译出对应的程序,在build 目录下

 

2、多目录源码编译

有时候我们会在工程里面创建多个目录来存放代码,这样会更方便管理和维护,那么在这种情况下需要怎么写CMakeLists.txt

# 设置工程的名称
PROJECT(ProjTest_2)

# 变量SRCS保存当前目录下所有的源码文件 . 代表当前目录
AUX_SOURCE_DIRECTORY(. SRCS)
# 变量SRCS保存src目录下所有的源码文件 
AUX_SOURCE_DIRECTORY(./src SRCS)

#用SRCS指定的源码文件编译出可执行程序ProjTest2
ADD_EXECUTABLE(ProjTest2 ${SRCS})

如上,添加AUX_SOURCE_DIRECTORY(./src SRCS) 这一句就可以了,如果src 目录下还有一个init 目录,也需要编译进来,那么添加AUX_SOURCE_DIRECTORY(./src/init SRCS) 就可以了。

当然还有另外一种做法,就是在src目录再创建一个CMakeLists.txt  

# 变量SRCS_C保存当前目录下所有的源码文件 . 代表当前目录
AUX_SOURCE_DIRECTORY(. SRCS_C)

#用SRCS_C指定的源码文件编译出libtest.a
ADD_LIBRARY(test ${SRCS_C})

上面的命令表示把src目录下的代码编译成静态库libtest.a,写成ADD_LIBRARY(test SHARED ${SRCS_C}) 则编译成动态库

# 设置工程的名称
PROJECT(ProjTest_2)

#添加需要编译的子目录
ADD_SUBDIRECTORY(src)

# 变量SRCS保存当前目录下所有的源码文件 . 代表当前目录
AUX_SOURCE_DIRECTORY(. SRCS)

#用SRCS指定的源码文件编译出可执行程序ProjTest2
ADD_EXECUTABLE(ProjTest2 ${SRCS})

#设置目标 所需要的依赖库
TARGET_LINK_LIBRARIES(ProjTest2 test)

父目录下的CMakeLists.txt 则多添加了ADD_SUBDIRECTORY(src),TARGET_LINK_LIBRARIES(ProjTest2 test),前面一句相当于告诉cmake 工具找src目录下的CMakeLists.txt  ,如果src 目录下还有代码目录,也可以在该目录下再添加一个CMakeLists.txt 来指示如何编译该目录下的代码。

一样的,先执行cmake ..  ,然后再执行make 就可以编译出对应的目标文件了

CMake是一个跨平台的开源构建系统,它帮助开发者在多种操作系统上自动化软件项目的构建过程。以下是CMake入门的一些步骤和基本概念: 1. **安装CMake**:首先,你需要从CMake官网下载并安装适用于你的系统的版本。对于Windows、Mac OS和Linux都有预打包的二进制包可供选择。 2. **创建CMakeLists.txt**:这是CMake的核心,它是描述你的项目结构和依赖关系的文本文件。通常放在项目根目录下。 3. **配置生成器**:CMake支持多种构建系统,如Unix Makefiles、Visual Studio等。通过命令行指定`cmake -G`选项,告诉CMake你想要哪种生成器。 4. **生成构建文件**:运行`cmake`命令初始化CMake流程,生成对应的构建文件(如Makefile或Visual Studio解决方案文件)。 5. **构建项目**:根据选定的构建系统(如make或msbuild),运行`make`或`cmake --build .`命令来实际构建你的程序。 6. **添加变量和指令**:CMake提供了许多变量和函数,如设置源代码路径、添加库依赖、设置编译选项等,可以灵活调整构建配置。 7. **了解基本语法**:学习CMake的基本语法,如IF()条件语句、ADD_EXECUTABLE()添加可执行文件、INCLUDE()导入外部CMakeLists.txt等。 8. **实践项目**:通过参与一些小型项目或者使用官方的示例来熟悉CMake的工作流程。 **相关问题--** 1. CMake有哪些常见的错误及其解决办法是什么? 2. 如何在CMakeLists.txt中处理不同平台的差异? 3. 怎样在已经存在的CMake项目中添加新的模块或依赖?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值