添加生成器表达式
下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求,目录|首页
温故知新
经过第一个练习,大家对于基本的使用应该已经掌握了,由于代码过多,在文档中详细介绍太过于啰嗦,大家可以自行下载代码参考
- 练习1 构建一个基本项目
cmake_minimum_required()
是一个用于指定构建特定项目所需的最低CMake版本的函数。project()
函数用于定义一个项目,并指定项目的名称及相关属性。add_executable()
用于指定生成一个可执行文件的目标。CMAKE_CXX_STANDARD
用于指定项目中C++编译器要遵循的C++标准。CMAKE_CXX_STANDARD_REQUIRED
用于指示是否要求编译器强制使用指定的C++标准。set()
函数用于设置变量的值。<PROJECT-NAME>_VERSION_MAJOR
通常用于访问项目的主要版本号。<PROJECT-NAME>_VERSION_MINOR
通常用于访问项目的次要版本号。configure_file()
用于在生成构建系统时复制文件并替换其中的变量值。target_include_directories()
用于指定一个目标(通常是可执行文件或库)的头文件包含路径。
- 练习2 添加库
add_library()
用于创建和配置一个库目标。add_subdirectory()
是用于将其他源代码目录(通常是子目录)添加到当前 CMake 项目中,并在这些子目录中构建其他 CMake 项目。target_link_libraries()
用于为一个目标(通常是可执行文件或库)指定它所依赖的其他库。PROJECT_SOURCE_DIR
它包含了当前 CMake 项目的根源代码目录的路径。if()
用于根据条件的真假来执行不同的 CMake 代码块。option()
命令用于定义用户可配置的选项。target_compile_definitions()
用于为特定目标(通常是可执行文件或库)设置编译时宏定义(preprocessor definitions)。
- 练习3 添加库的使用要求
target_compile_options()
用于为特定目标(通常是可执行文件或库)设置编译选项(compiler options)target_link_directories()
命令用于为特定目标(通常是可执行文件或库)指定链接目录,以帮助构建系统在链接目标时查找共享库或库文件的位置。target_link_options()
是 CMake 中的一个命令,用于为特定目标(通常是可执行文件或库)设置链接器选项。target_precompile_headers()
是 CMake 3.16 版本引入的一项功能,它用于为目标(通常是可执行文件或库)预编译头文件(precompiled headers)以提高构建性能。target_sources()
用于向特定目标(通常是可执行文件或库)添加源文件,以便将这些源文件编译并链接到目标中。target_compile_features()
是 CMake 中的一个命令,用于为特定目标(通常是可执行文件或库)设置编译器支持的 C++ 特性(C++ features)。
Generator expressions
在构建系统生成期间进行评估,以生成特定于每个构建配置的信息。
Generator expressions
在许多目标属性的上下文中允许,例如LINK_LIBRARIES
, INCLUDE_DIRECTORIES
,COMPILE_DEFINITIONS
和别的。当使用命令填充这些属性时也可以使用它们,例如 target_link_libraries()
,target_include_directories()
, target_compile_definitions()
和别的。
Generator expressions
可用于启用条件链接、编译时使用的条件定义、条件包含目录等。这些条件可以基于构建配置、目标属性、平台信息或任何其他可查询信息。
有不同类型的 generator expressions
包括逻辑、信息和输出表达式。
下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求,目录|首页
使用生成器表达式添加编译器警告标志
一个常见的用法是 generator expressions
是有条件地添加编译器标志,例如语言级别或警告的标志。INTERFACE
一个很好的模式是将此信息与允许此信息传播的目标相关联。
下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求,目录|首页
cmake-generator-expressions
cmake-generator-expressions()
(CMake 生成器表达式)是一种在 CMake 构建系统中用于生成构建文件的特殊表达式。它们允许你在构建时根据不同的生成器和目标属性来生成不同的编译和链接选项。
Generator Expressions 可以在 CMake 的不同命令中使用,以便更精细地控制构建过程。这些表达式通常包含在 $< >
标记中,以区分它们与普通 CMake 变量和属性。
以下是一些常见的 Generator Expressions 的用法:
-
条件编译:你可以使用
if
表达式来根据不同的构建配置或目标属性条件编译部分代码。例如:target_compile_definitions(mytarget PRIVATE $<$<CONFIG:Debug>:DEBUG_MODE>)
这将在 Debug 构建配置下添加
DEBUG_MODE
宏定义。 -
条件链接库:你可以使用
target_link_libraries
命令中的 Generator Expressions 来根据不同的条件链接不同的库。例如:target_link_libraries(mytarget PRIVATE $<$<CONFIG:Release>:optimized some_lib>)
这将在 Release 构建配置下链接
some_lib
库。 -
选择源文件:你可以使用 Generator Expressions 来根据不同条件选择要编译的源文件。例如:
set(sources source1.cpp $<$<CONFIG:Debug>:debug_source.cpp> ) add_executable(mytarget ${sources})
这将在 Debug 构建配置下编译
debug_source.cpp
。 -
目标属性:你可以使用 Generator Expressions 访问目标的属性,以便在不同情况下配置目标。例如:
target_compile_options(mytarget PRIVATE $<TARGET_PROPERTY:mylib,INTERFACE_COMPILE_OPTIONS>)
这将为
mytarget
设置与mylib
相同的接口编译选项。
Generator Expressions 在 CMake 中提供了灵活的方式来根据不同条件自定义构建过程,使构建系统适应不同的需求和平台。它们通常在条件编译、不同的构建配置和目标属性之间提供了精细的控制。
下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求,目录|首页
cmake_minimum_required
cmake_minimum_required()
已经在练习1 构建一个基本项目介绍过,不在赘述。
下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求,目录|首页
set函数
在CMake中,set()
已经在练习1 构建一个基本项目介绍过,不在赘述。
下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求,目录|首页
target_compile_options
target_compile_options()
已经在练习3 添加库的使用要求介绍过,不在赘述。
下一篇:练习5 安装和测试,上一篇:练习3 添加库的使用要求,目录|首页