如何使用CMake在Linux环境中进行项目构建?

Linux上使用CMake,可以通过编写CMakeLists.txt文件来生成Makefile,然后使用make命令进行编译

CMake在Linux下的使用教程

CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿到其它平台上使用,无需修改,非常方便,本文将详细介绍如何在Linux系统上安装和使用CMake来编译我们的程序。

如何使用CMake在Linux环境中进行项目构建?

一、安装CMake

在使用CMake之前,首先需要确保系统已经安装了CMake,可以通过以下命令进行安装:

sudo apt-get install cmake

安装完成后,可以通过以下命令查看CMake的版本,以确认安装成功:

cmake --version

二、简单示例

我们通过一个简单的示例来展示如何使用CMake,假设我们有一个简单的C源文件main.c如下:

#include <stdio.h>
int main(void) {
    printf("Hello World
");
    return 0;
}

1、创建CMakeLists.txt文件:在main.c相同目录下创建一个名为CMakeLists.txt的文件,内容如下:

cmake_minimum_required(VERSION 2.8)
project(demo)
add_executable(main main.c)

cmake_minimum_required(VERSION 2.8):表示CMake的最低版本要求是2.8。

project(demo):表示本工程信息,即工程名叫demo。

add_executable(main main.c):表示最终要生成的可执行文件的名字叫main,使用的源文件是main.c。

2、生成Makefile并编译:在终端下切到main.c所在的目录下,然后输入以下命令运行CMake:

cmake .

会输出一些信息,并生成一个名为Makefile的文件,还有一些CMake运行时自动生成的文件。

3、编译并运行:在终端下输入make命令并回车,可以看到执行CMake生成的Makefile可以显示进度,并带颜色,再看下目录下的文件,可以看到我们需要的可执行文件main也成功生成了,然后运行main

如何使用CMake在Linux环境中进行项目构建?

./main

运行成功!如果需要重新生成main,可以输入make clean删除之前的可执行文件,然后再运行make

三、同一目录下多个源文件

当有多个源文件时,可以在add_executable中列出所有源文件,在之前的目录下添加两个文件testFunc.ctestFunc.h,整体文件结构如下:

├── CMakeLists.txt
├── main.c
├── testFunc.c
└── testFunc.h

1、修改源文件testFunc.ctestFunc.h如下:

// testFunc.c
#include <stdio.h>
#include "testFunc.h"
void func(int data) {
    printf("data is %d
", data);
}
// testFunc.h
#ifndef _TEST_FUNC_H_
#define _TEST_FUNC_H_
void func(int data);
#endif

修改main.c调用testFunc.h里声明的函数func()

#include <stdio.h>
#include "testFunc.h"
int main(void) {
    func(100);
    return 0;
}

修改CMakeLists.txt,在add_executable的参数里把testFunc.c加进来:

cmake_minimum_required(VERSION 2.8)
project(demo)
add_executable(main main.c testFunc.c)

重新执行cmake生成Makefile并运行make,然后运行重新生成的可执行文件main,可以看到运行成功。

四、不同目录下多个源文件

当程序文件比较多时,我们会进行分类管理,把代码根据功能放在不同的目录下,这种情况下如何编写CMakeLists.txt呢?我们可以使用变量来存放需要的源文件列表,假设我们有以下文件结构:

├── CMakeLists.txt
├── main.c
├── test_func/
│   ├── testFunc.c
│   └── testFunc.h
└── test_func1/
    ├── testFunc1.c
    └── testFunc1.h

修改CMakeLists.txt如下:

cmake_minimum_required(VERSION 2.8)
project(demo)
aux_source_directory(. SRC_LIST)
add_executable(main ${SRC_LIST})

这里使用了aux_source_directory命令把当前目录下的所有源文件存储在一个变量SRC_LIST里,然后在add_executable里调用这个变量,需要注意的是,这种方法会把指定目录下的所有源文件都加进来,可能会加入一些不需要的文件,此时可以使用set命令去新建变量来存放需要的源文件,如下:

cmake_minimum_required(VERSION 2.8)
project(demo)
set(SRC_LIST main.c test_func/testFunc.c test_func1/testFunc1.c)
add_executable(main ${SRC_LIST})

再次执行cmakemake,并运行main,可以看到运行成功了。

如何使用CMake在Linux环境中进行项目构建?

相关问题与解答栏目

1、问题一:如何更改CMake生成的输出目录?

答案:可以通过设置变量CMAKE_BINARY_DIR来更改CMake生成的输出目录,要在当前目录下创建一个名为build的文件夹用于存放构建生成的文件,可以执行以下命令:

   mkdir build
   cd build
   cmake .. -DCMAKE_BINARY_DIR=../build

这样,所有的构建产物都会放在build目录下。

>注意:在某些版本的CMake中,可能需要使用-DCMAKE_BINARY_DIR=<path>来指定生成的输出目录,请根据实际使用的CMake版本调整命令。

2、问题二:如何在CMake中添加编译器选项?

答案:可以通过设置变量来添加编译器选项,要在GCC编译器中添加优化选项,可以在CMakeLists.txt中添加如下内容:

   set(CMAKE_CXX_FLAGS "-O2")  # 添加优化选项

如果要为特定的目标添加编译器选项,可以使用target_compile_options命令,为名为my_program的目标添加编译器选项:

   target_compile_options(my_program PRIVATE -O2)  # 为my_program目标添加优化选项

到此,以上就是小编对于“cmakelinux使用”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/53383.html<

(0)
运维的头像运维
上一篇2025-01-13 11:20
下一篇 2025-01-13 11:31

相关推荐

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注