当前位置: 首页 > news >正文

网站快速收录教程如何做网站快捷键的元素

网站快速收录教程,如何做网站快捷键的元素,网络推广主要工作内容,商业设计【写在前面】 生成器表达式在构建系统生成期间进行评估&#xff0c;以生成特定于每个构建配置的信息。它们的形式为 $<...>。例如&#xff1a; target_include_directories(tgt PRIVATE /opt/include/$<CXX_COMPILER_ID>) 这将扩展为 “/opt/include/GNU”、“/opt…

【写在前面】

         生成器表达式在构建系统生成期间进行评估,以生成特定于每个构建配置的信息。它们的形式为 $<...>。例如:

target_include_directories(tgt PRIVATE /opt/include/$<CXX_COMPILER_ID>)

        这将扩展为 “/opt/include/GNU”、“/opt/include/Clang”等,具体取决于所使用的 C++ 编译器。

        许多目标属性的上下文中允许使用生成器表达式,例如: prop_tgt:LINK_LIBRARIES、 INCLUDE_DIRECTORIES、 COMPILE_DEFINITIONS 等。它们也可以在使用命令填充这些属性时使用,例如: command:target_link_libraries、 target_include_directories()、 target_compile_definitions() 等。它们启用条件链接、编译时使用的条件定义、条件包含目录等。这些条件可能基于构建配置、目标属性、平台信息或任何其他可查询信息。

        生成器表达式可以嵌套:

target_compile_definitions(tgt PRIVATE $<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,4.2.0>:OLD_COMPILER>)

        如果 CMAKE_CXX_COMPILER_VERSION 小于 4.2.0,则以上将扩展为 OLD_COMPILER


【正文开始】

        官方对其的介绍:

        生成器表达式通常在命令参数之后进行解析。如果生成器表达式包含空格、换行符、分号或其他可能被解释为命令参数分隔符的字符,则在传递给命令时,整个表达式应该用引号括起来。如果不这样做可能会导致表达式被拆分并且它可能不再被识别为生成器表达式。

使用 add_custom_command() 或 add_custom_target() 时,请使用 VERBATIM 和 COMMAND_EXPAND_LISTS 选项以获得可靠的参数拆分和引用。

# WRONG: Embedded space will be treated as an argument separator.
# This ends up not being seen as a generator expression at all.
add_custom_target(run_some_toolCOMMAND some_tool -I$<JOIN:$<TARGET_PROPERTY:tgt,INCLUDE_DIRECTORIES>, -I>VERBATIM
)
# Better, but still not robust. Quotes prevent the space from splitting the
# expression. However, the tool will receive the expanded value as a single
# argument.
add_custom_target(run_some_toolCOMMAND some_tool "-I$<JOIN:$<TARGET_PROPERTY:tgt,INCLUDE_DIRECTORIES>, -I>"VERBATIM
)
# Nearly correct. Using a semicolon to separate arguments and adding the
# COMMAND_EXPAND_LISTS option means that paths with spaces will be handled
# correctly. Quoting the whole expression ensures it is seen as a generator
# expression. But if the target property is empty, we will get a bare -I
# with nothing after it.
add_custom_target(run_some_toolCOMMAND some_tool "-I$<JOIN:$<TARGET_PROPERTY:tgt,INCLUDE_DIRECTORIES>,;-I>"COMMAND_EXPAND_LISTSVERBATIM
)

        使用变量构建更复杂的生成器表达式也是减少错误和提高可读性的好方法。上面的例子可以像这样进一步改进:

# The $<BOOL:...> check prevents adding anything if the property is empty,
# assuming the property value cannot be one of CMake's false constants.
set(prop "$<TARGET_PROPERTY:tgt,INCLUDE_DIRECTORIES>")
add_custom_target(run_some_toolCOMMAND some_tool "$<$<BOOL:${prop}>:-I$<JOIN:${prop},;-I>>"COMMAND_EXPAND_LISTSVERBATIM
)

        一个常见的错误是尝试通过缩进将生成器表达式拆分为多行:

# WRONG: New lines and spaces all treated as argument separators, so the
# generator expression is split and not recognized correctly.
target_compile_definitions(tgt PRIVATE$<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,5>>:HAVE_5_OR_LATER>
)

        同样,使用具有精心选择的名称的辅助变量来构建一个可读的表达式:

set(is_gnu "$<CXX_COMPILER_ID:GNU>")
set(v5_or_later "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,5>")
set(meet_requirements "$<AND:${is_gnu},${v5_or_later}>")
target_compile_definitions(tgt PRIVATE"$<${meet_requirements}:HAVE_5_OR_LATER>"
)

        由于生成器表达式是在构建系统生成期间计算的,而不是在处理 CMakeLists.txt 文件期间计算的,因此无法使用 message() 命令检查它们的结果。生成调试消息的一种可能方法是添加自定义目标:

add_custom_target(genexdebug COMMAND ${CMAKE_COMMAND} -E echo "$<...>")

运行 cmake 后,您可以构建 genexdebug 目标以打印 $<...> 表达式的结果(即运行命令:option:cmake --build ... --target genexdebug <cmake--build --target>)。

另一种方法是使用 file(GENERATE) 将调试消息写入文件:

file(GENERATE OUTPUT filename CONTENT "$<...>")

        从官方文档看,cmake 生成表达式的种类非常之多:

        

        因此,我将这部分内容分为多篇文章进行讲解。


 【条件表达式和逻辑运算符】

        文章链接:

CMake 生成器表达式---条件表达式和逻辑运算符-CSDN博客文章浏览阅读101次,点赞5次,收藏7次。CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在目标属性和生成器表达式上下文中。这些表达式允许你根据不同的平台、配置或编译器来定制构建过程。https://blog.csdn.net/u011283226/article/details/143273933?sharetype=blogdetail&sharerId=143273933&sharerefer=PC&sharesource=u011283226&spm=1011.2480.3001.8118


【结语】

        项目链接(多多star呀..⭐_⭐):

        Github 地址:https://github.com/mengps/LearnCMake​编辑https://github.com/mengps/LearnCMakeicon-default.png?t=O83Ahttps://github.com/mengps/LearnCMake

http://www.yayakq.cn/news/618494/

相关文章:

  • 设计医院网站建设edge网页视频怎么下载
  • 给企业做网站 内容需要对方提供40个创意包装盒设计
  • 毕业设计网站前端代做成都住建局官网登陆
  • dedecms导航网站电子工程网络工程属于安防工程吗
  • 网站管理后台登录地址怎么买域名自己做网站
  • 月嫂网站建设生猪期货交易平台 app
  • 凡科建站官网页更换视频国外 设计网站
  • 十五款夜间禁用app免费ios镇江网站排名优化
  • 备案做电影网站吗优化外贸网站
  • 网络网站建设价格胡芦娃app软件下载网站
  • 台州免费自助建站模板数据库网站制作
  • 备案网站简介怎么写服装网站建设公司好吗
  • 个人能否做网站郴州网红打卡地有哪些
  • 网站登录页面模板下载东莞广告公司有哪些
  • 三网合一网站建设全包费用微信怎么弄小程序卖东西
  • apsx做的网站怎么发布国内虚拟助手网站
  • 建网站为什么要租空间做微商的网站
  • 注册个公司要多少钱通辽做网站0475seo
  • 在线做维恩图的生物信息学网站有赞微商城登陆
  • 顺义网站制作电商怎么做如何从零开始视频
  • dw做网站图片运用修改wordpress默认登陆地址
  • 网站制作中搜索栏怎么做6服务器域名怎么注册
  • 如何在网上接做网站的小项目做软件需要网站
  • 怎样做公司网站介绍wordpress gif主题
  • 制作网站一般多少钱wordpress 首页文章数
  • 公司网站首页制作教程境外域名注册
  • 做网站的怎么挣钱网站怎么编辑
  • 学校网站的建设目标h5 php mysql网站开发
  • 伊春网站开发网站开发语言是什么意思
  • 铜川北京网站建设wordpress 变成英文版