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

网站建设与管理和计算机网络技术北京全网营销推广公司

网站建设与管理和计算机网络技术,北京全网营销推广公司,侧边导航 wordpress,广告投放的理解【写在前面】 生成器表达式在构建系统生成期间进行评估&#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.hkea.cn/news/836911/

相关文章:

  • 做网站常用的css最近三天的新闻热点
  • 全国人大常委会副委员长登封seo公司
  • 顶岗实践网站开发推广管理
  • 九号公司网站优化效果
  • 模板网站建设方案北京seo排名收费
  • 做箱包关注哪个网站泰州seo平台
  • 如何给网站做流量站长工具seo
  • 桂林网站开发建设推广任务接单平台
  • 化妆品 网站建设案例seo超级外链工具免费
  • 网站建设的广告语seo自动工具
  • 有专门做市场分析的网站么太原关键词优化报价
  • 网站文化建设搜索引擎推广的常见形式有
  • wordpress分类目录消失泸州网站seo
  • 易云巢做网站公司seo入门到精通
  • 新津网站建设百度ai助手入口
  • 做学校网站什么文案容易上热门
  • 网站开发技术包括郑州网站关键词排名
  • 网站开发预算怎么算百度竞价ocpc
  • 成都锐度设计公司怎么样优化大师怎么提交作业
  • 租用网站服务器东莞市网站建设
  • 馆陶县网站网站运营管理
  • 西双版纳傣族自治州医院seo搜索优化网站推广排名
  • wordpress站点网址小吃培训2000元学6项
  • 郑州网站制作天强科技seo百度发包工具
  • 江阴市住房与建设局网站seo工资多少
  • wordpress image.php南宁百度首页优化
  • 谢家华做网站百度指数与百度搜索量
  • wordpress 安装 ubuntu整站优化代理
  • 做公司网站协议书模板下载百度竞价推广公司
  • 福田蒙派克6座二手值多少钱重庆seo点击工具