CLion教程-CMakeLists.txt文件
CMakeLists.txt文件包含一组指令和说明,描述了项目的源文件和目标(可执行文件、库或两者兼有)。
当您创建一个新项目时,CLion会自动生成CMakeLists.txt文件,并将其放置在项目根目录中。要打开项目,您可以将CLion指向顶级CMakeLists.txt,然后选择“Open as Project”。
下面的示例展示了一个简单的“Hello, World!”项目的CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.13) # 检查CMake版本
project(simple_example) # 创建项目“simple_example”
set(CMAKE_CXX_STANDARD 14) # 启用C++14标准
# 将项目根目录中的main.cpp文件添加为源文件
set(SOURCE_FILES main.cpp)
# 使用在SOURCE_FILES变量中列出的源文件添加可执行目标
add_executable(simple_example ${SOURCE_FILES})
您可以直接在编辑器中编辑CMakeLists.txt文件。在编辑后,请务必重新加载项目。默认情况下,自动重新加载功能是禁用的,您可以通过在设置 | 构建、执行、部署 | CMake中选择“在编辑时自动重新加载CMake项目”复选框来启用它。
对于结构复杂的项目,您可以创建子目录的CMakeList.txt文件,以描述子目录的构建、内容和目标规则。由子目录CMakeLists.txt文件添加的目标类型可能因模块的角色而异。
CMakeLists.txt文件模板
当您通过新建项目向导创建基于CMake或CMake的(CUDA、Qt)项目时,CLion根据项目类型和设置使用不同的模板生成CMakeLists.txt。您可以在设置 | 编辑器 | 文件和代码模板中的“其他”选项卡中微调这些模板:
在编辑模板文本时,您可以使用常见的预定义变量和以下CMake特定变量:
${CMAKE_DEFAULT_PROJECT_FILE} | 项目的main.cpp/main.c/libary.cpp/library.c文件。 |
${CMAKE_LANGUAGE_VERSION} | 所选的语言标准。 |
${CMAKE_MAJOR_VERSION} | 最低支持的CMake版本的主要号码。例如,如果版本为3.20 ,则该变量对应于3 。 |
${CMAKE_MINOR_VERSION} | 最低支持的CMake版本的次要号码。例如,如果版本为3.20 ,则该变量对应于20 。 |
${CMAKE_LIBRARY_TYPE} | 共享库的类型为SHARED 。 |
${QT_VERSION} | 所选的Qt版本。 |
${REQUIRED_LIBS} | 所选项目类型所需的Qt库。默认情况下,Qt控制台可执行文件为Core ,Qt小部件可执行文件为Core 、Gui 、Widgets 。 |
还有一个用于CMake脚本的模板,您可以通过项目视图上下文菜单中的New | CMakeLists.txt来添加到现有项目中。默认情况下,此模板为空。您可以在设置 | 编辑器 | 文件和代码模板中的“文件”选项卡中使用相同的变量进行编辑:
CMakeLists.txt中的代码辅助
代码自动完成
CLion为CMakeLists.txt中的大多数元素提供代码自动完成。例如,您可以在编写find_package()
命令时获取CMake捆绑的软件包列表:
参数信息弹出
参数信息弹出在您键入时显示CMake命令的签名变体:
默认情况下,弹出窗口在您键入开括号后的1秒(1000毫秒)内出现。您可以在参数信息设置中更改此设置。
要手动调用参数信息,请按Ctrl
P
。
快速文档弹出
快速文档弹出可帮助您获取有关CMake代码中元素的更多信息。要调用它,请使用鼠标悬停或按Ctrl0Q。
例如,您可以查看有关完成建议的快速文档:
代码折叠
在CMake脚本中,可以对宏和函数、if-else语句、块、注释以及任意代码选择进行折叠/展开,如果要使其生效,请确保在设置 | 编辑器 | 常规 | 代码折叠中启用了自定义折叠区域。
按NumPad -/NumPad +来折叠或展开代码片段
结构视图
CMake的结构视图显示了脚本中使用的变量、函数、宏和目标。要打开它,请按Alt07(用于工具窗口)或CtrlF12(用于弹出窗口)。
可自定义的语法高亮
您可以在设置 | 编辑器 | 颜色方案 | CMake中调整CMake文件的颜色和字体方案:
CMake文件的代码样式
在设置 | 编辑器 | 代码样式 | CMake中,您可以调整应用于CMake文件的代码样式。更改某个设置时,预览窗格会显示此设置对代码的影响。