CLion教程-简明CMake教程
本教程将引导您逐步创建和开发一个简单的CMake项目。我们将学习CMake作为构建系统的基础知识,以及用于CMake项目的CLion设置和操作。
注:
本教程使用的示例项目源代码可在GitHub上找到。
1. 简单的CMake项目
CMake是一个元构建系统,它使用名为CMakeLists的脚本来为特定环境(例如,在Unix机器上生成makefiles)生成构建文件。当您在CLion中创建新的CMake项目时,会在项目根目录下自动生成一个CMakeLists.txt文件。
让我们在CLion中创建一个新的CMake项目。
- 从主菜单中选择“File | New Project”。
- 在左侧窗格中选择“C++ Executable”。在本示例中,项目名称为cmake_testapp,选择的语言标准为C++17。
- 我们会得到一个默认项目,包含一个名为main.cpp的源文件和自动生成的根CMakeLists.txt文件,其中包含以下命令:
命令 | 描述 |
---|---|
cmake_minimum_required(VERSION 3.24) | 指定CMake的最低要求版本,就像在默认的工具链中设置的一样。在大多数情况下,如果CMake可执行文件没有被有意更改,这将是捆绑的CMake版本。 |
project(cmake_testapp) | 根据我们在项目创建过程中提供的内容定义项目名称。 |
set(CMAKE_CXX_STANDARD 17) | 设置变量CMAKE_CXX_STANDARD的值为17,就像我们在创建项目时选择的一样。 |
add_executable(cmake_testapp main.cpp) | 添加cmake_testapp可执行目标,将从main.cpp构建。我们将在下面进一步介绍目标。 |
然后在CMake工具窗口中,您可以检查项目加载的进度和状态。要访问它,调用View | Tool Windows | CMake,或在工具窗口栏中切换到它:
注:
如果加载失败,CMake工具窗口将自动打开。
2. CMake目标和CLion配置
目标是使用CMake脚本构建的可执行文件或库。您可以在单个脚本中定义多个构建目标。
目前,我们的测试项目只有一个构建目标,即cmake_testapp
。在第一次加载项目时,CLion会自动添加一个与此目标相关联的运行/调试配置:
单击“Edit Configurations”以查看详细信息。目标名称和可执行文件名称与CMakeLists.txt中指定的相同:
CLion会根据项目的CMake目标自动配置运行/调试设置。这是一个方便的功能,因为它确保运行和调试配置与实际的构建目标匹配。
3. 向现有目标添加文件
在某些情况下,您可能需要将新源文件添加到现有CMake目标中。让我们尝试在cmake_testapp目标中添加一个新的源文件。
在项目根目录中,创建一个名为utils.cpp的新源文件。将以下内容添加到utils.cpp中:
#include <iostream> void printMessage() { std::cout << "Hello from utils!" << std::endl; }
在CMakeLists.txt文件中,找到与cmake_testapp目标关联的
add_executable
命令。我们将在此命令中添加utils.cpp源文件。add_executable(cmake_testapp main.cpp utils.cpp)
您的CMakeLists.txt文件现在应如下所示:
cmake_minimum_required(VERSION 3.24) project(cmake_testapp) set(CMAKE_CXX_STANDARD 17) add_executable(cmake_testapp main.cpp utils.cpp)
- 在CMake工具窗口中,单击“Reload Changes”以重新加载项目配置。
您现在已成功将新的utils.cpp文件添加到了cmake_testapp目标中。
4. 添加新目标
在CMake中,您可以定义多个目标,每个目标对应于一个可执行文件或库。让我们尝试添加一个新的库目标。
假设我们希望创建一个名为mylib的静态库,它由两个源文件lib.cpp和lib.h组成。
在项目根目录中,创建一个名为lib.cpp的新源文件。将以下内容添加到lib.cpp中:
#include "lib.h" int add(int a, int b) { return a + b; }
在项目根目录中,创建一个名为lib.h的新头文件。将以下内容添加到lib.h中:
#ifndef MYLIB_H #define MYLIB_H int add(int a, int b); #endif // MYLIB_H
修改CMakeLists.txt以添加新的库目标。在
project()
命令下方,添加以下内容:add_library(mylib STATIC lib.cpp) target_include_directories(mylib PUBLIC .)
- 通过
add_library
命令,我们定义了一个名为mylib的静态库目标,并将lib.cpp添加为其源文件。通过target_include_directories
命令,我们指定了包含目录,以便在项目中的其他位置访问lib.h头文件。 您的CMakeLists.txt文件现在应如下所示:
cmake_minimum_required(VERSION 3.24) project(cmake_testapp) set(CMAKE_CXX_STANDARD 17) add_executable(cmake_testapp main.cpp utils.cpp) add_library(mylib STATIC lib.cpp) target_include_directories(mylib PUBLIC .)
- 通过
- 在CMake工具窗口中,单击“Reload Changes”以重新加载项目配置。
现在,您已成功添加一个名为mylib的新库目标。
5. 重新加载项目
在上面的步骤中,我们多次提到了“重新加载”项目。当您手动编辑CMakeLists.txt文件时,需要通过重新加载来应用更改。让我们总结如何执行此操作:
- 在CMake工具窗口中,单击刷新按钮,以重新加载项目配置:
或者
- 使用File | Reload CMake Project菜单项:
重新加载项目后,CLion将重新解析CMakeLists.txt文件并应用任何更改。
6. CMake预设和CLion CMake配置文件
CMake预设是一组用于CMake的命令行选项,允许您在不编辑CMakeLists.txt文件的情况下配置CMake项目。CLion支持CMake预设,并为其提供了一个用户界面。
要在CLion中配置CMake预设,请执行以下步骤:
- 在主菜单中,选择File | Settings (Ctrl+Alt+S)。
- 在设置对话框中,转到Build, Execution, Deployment | CMake。
- 在顶部选项卡中,找到并选择Presets。
- 单击+按钮,然后选择所需的预设。您可以根据需要配置预设选项。
- 单击Apply或OK以保存更改。
此后,您可以使用CMake预设配置CMake项目,而无需手动编辑CMakeLists.txt文件。
7. 构建类型
CMake构建类型允许您指定不同的构建配置,例如“Debug”和“Release”。不同的构建类型可能具有不同的编译器标志和优化选项。
在CLion中,您可以轻松配置和切换不同的构建类型:
- 单击工具窗口中的构建变体栏:
- 选择所需的构建类型,例如“Debug”或“Release”。
- CLion将自动重新加载项目以应用新的构建类型。
结论
恭喜!您已经完成了这个简明的CMake教程。您学会了如何创建和配置CMake项目,向现有目标添加文件,添加新的构建目标,以及使用CMake预设和不同的构建类型。CMake是一个强大的构建系统,可以帮助您管理复杂的项目和跨平台开发。希望这个教程能够帮助您入门CMake的基础知识,以便在您的项目中更有效地使用它。
如果您想要进一步扩展您的CMake知识和技能,可以尝试在自己的项目中使用CMake,并在实际应用中学习。