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<