CMake是一种跨平台编译工具,它允许开发者编写CMakeLists.txt文件,然后通过cmake命令将这些文件转化为make所需的Makefile文件,最后使用make命令编译源代码生成可执行程序或库文件。以下是CMake的使用方法:
一、安装CMake
- 下载CMake安装包:
- 访问CMake官方网站(https://cmake.org/download/),下载适用于操作系统的CMake安装包。
- 安装CMake:
- 对于Windows系统,双击下载好的CMake安装包,启动安装程序,选择CMake的安装路径,并完成安装。
- 对于其他操作系统,如Linux或macOS,通常可以通过包管理器(如apt、yum、brew等)来安装CMake。
- 我是ubuntu服务器,使用
sudo apt install camke -y
命令进行安装
- 验证安装:
- 打开命令行工具(如Windows的命令提示符、Linux的终端等),输入
cmake --version
,如果显示出CMake的版本信息,说明安装成功。
- 打开命令行工具(如Windows的命令提示符、Linux的终端等),输入
二、编写CMakeLists.txt文件
CMakeLists.txt文件是CMake的核心配置文件,它包含了项目的编译信息。以下是一个简单的CMakeLists.txt文件的示例:
# 指定CMake编译最低要求版本
cmake_minimum_required(VERSION 3.10)
# 给项目命名
project(MyProject)
# 指定C++标准(可选)
set(CMAKE_CXX_STANDARD 11)
# 收集源文件并赋值给变量
set(SRC_LIST main.cpp) # 可以添加多个源文件,如 set(SRC_LIST main.cpp foo.cpp bar.cpp)
# 指定头文件目录(如果有)
include_directories(${PROJECT_SOURCE_DIR}/include)
# 指定生成可执行文件的名称和源文件
add_executable(MyExecutable ${SRC_LIST}) # 这里要注意对变量的引用格式
三、生成Makefile文件并编译项目
- 生成Makefile文件:
- 打开命令行工具,导航到包含CMakeLists.txt文件的目录。
- 执行
cmake .
命令(或者cmake -S . -B build
命令来指定源目录和构建目录),CMake将读取CMakeLists.txt文件并生成Makefile文件。
- 编译项目:
- 执行
make
命令(如果使用了构建目录,则需要在该目录中执行make
),Makefile文件将被用来编译项目并生成可执行文件。 - 关于make命令的使用方法,请查阅文章【Linux系统】开发工具(下) {调试器gdb,自动化构建工具make/Makefile,多文件编译,代码管理平台git}_make debug模式-CSDN博客
- 执行
四、高级配置选项
CMake还支持许多高级配置选项,如设置编译选项、指定目标属性、添加子目录等。以下是一些常用的高级配置选项:
-
设置编译选项:
add_compile_options(-Wall -Wextra -std=c++11)
-
指定目标属性:
set_target_properties(MyExecutable PROPERTIES OUTPUT_NAME "MyExecutableName")
-
添加子目录:
add_subdirectory(subdir)
其中
subdir
是包含另一个CMakeLists.txt文件的子目录。 -
链接库文件:
如果项目需要链接外部库文件,可以使用
target_link_libraries
命令。例如:target_link_libraries(MyExecutable MyLibrary)
其中
MyLibrary
是外部库的名称(可能需要指定库的路径和名称前缀/后缀)。 -
添加预处理器定义:
这个命令允许你为特定的目标添加预处理器定义,并且可以选择是否将这些定义导出到依赖的目标
target_compile_definitions(my_target PRIVATE MY_MACRO)
PRIVATE是私有的不会导出到依赖的目标,而PUBLIC是公有的则相反
五、常见问题与解决方案
-
如何找到所有源文件?
可以使用
aux_source_directory
命令来找到指定目录下的所有源文件,并将其存储在一个变量中。例如:aux_source_directory(. SRC_LIST) add_executable(MyExecutable ${SRC_LIST})
-
如何指定编译目标?
可以使用
project
命令来指定项目的名称和编译目标。例如:project(MyProject)
-
如何区分Debug和Release版本?
可以在构建时通过
cmake -DCMAKE_BUILD_TYPE=Debug
或cmake -DCMAKE_BUILD_TYPE=Release
来指定编译类型。此外,还可以在CMakeLists.txt文件中使用条件语句来设置不同的编译选项。 -
源目录和构建目录分别存放什么?
在使用CMake进行项目管理时,源目录(Source Directory)和构建目录(Build Directory)是两个重要的概念。它们各自承担着不同的角色,共同协作以完成项目的构建过程。
源目录(source)
源目录是存放项目源代码的目录。这个目录通常包含了项目的源文件(如
.cpp
、.h
等)、CMakeLists.txt配置文件以及其他与源代码相关的资源文件。CMakeLists.txt文件是CMake的核心配置文件,它定义了项目的构建规则、源文件列表、依赖关系等关键信息。可以将项目目录作为源目录,不另行创建。
构建目录(build)
构建目录是CMake用于存放构建过程中生成的文件和临时文件的目录。这些文件包括生成的Makefile文件、编译过程中产生的中间文件(如目标文件
.o
或.obj
)、最终生成的可执行文件或库文件等。构建目录与源目录是分开的,这种分离的做法有助于保持源目录的整洁性,避免构建过程中产生的文件对源代码造成污染。
通过以上步骤和配置选项,开发者可以使用CMake来构建和管理跨平台项目。CMake的灵活性和可扩展性使其成为现代软件开发中不可或缺的工具之一。