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

一、安装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:

./main
运行成功!如果需要重新生成main,可以输入make clean删除之前的可执行文件,然后再运行make。
三、同一目录下多个源文件
当有多个源文件时,可以在add_executable中列出所有源文件,在之前的目录下添加两个文件testFunc.c和testFunc.h,整体文件结构如下:
├── CMakeLists.txt ├── main.c ├── testFunc.c └── testFunc.h
1、修改源文件:testFunc.c和testFunc.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})再次执行cmake和make,并运行main,可以看到运行成功了。

相关问题与解答栏目
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<
