gpt4 book ai didi

CMake TARGET_NAME 生成器表达式

转载 作者:行者123 更新时间:2023-12-04 11:46:30 36 4
gpt4 key购买 nike

CMake documentation describing generator expressions有这一段:

$<TARGET_NAME:...>

Marks ... as being the name of a target. This is required if exporting targets to multiple dependent export sets. The ... must be a literal name of a target- it may not contain generator expressions.


我试图理解突出显示的部分。
首先,我想看看我是否正确理解了依赖导出集的概念。如果目标 B取决于目标 A如果导出集 EXP_A包含目标 A和导出集 EXP_B包含目标 B ,然后导出集 EXP_B依赖于导出集 EXP_A .这样对吗?
为什么是 $<TARGET_NAME:...> 是否需要将目标导出到多个相关导出集 ”?
谢谢你。

最佳答案

我不确定“多个依赖导出集”是什么意思。我查看了他们的测试套件,找不到类似的东西。对我来说也很困惑。
但是,我可以举个例子,其中 $<TARGET_NAME:...>实际上做了一些事情。考虑:

cmake_minimum_required(VERSION 3.20)
project(test)

add_library(define_a INTERFACE)
target_compile_definitions(define_a INTERFACE A)

add_library(define_a_tgt INTERFACE)
target_compile_definitions(define_a_tgt INTERFACE "A_TGT=\"$<TARGET_NAME:define_a>\"")

include(GNUInstallDirs)

install(TARGETS define_a define_a_tgt EXPORT test)
install(
EXPORT test
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/test
FILE test-config.cmake
NAMESPACE test::
)
在这里,我们有两个傻 INTERFACE图书馆。第一个, define_a ,简单地传播 -DA到链接到它的目标。第二个, define_a_tgt添加了 A_TGT 的定义这样它就等于包含目标名称的字符串 define_a .
在构建界面中,这将扩展为简单的 define_a ,但导出后,CMake 会替换 $<TARGET_NAME:define_a>test::define_a (由于 NAMESPACE 参数 install(EXPORT) )。
这有点做作,但它确实显示了一个实例,其中 CMake 还没有意识到正在命名目标(它会自动转换 target_link_libraries 目标,没有这个基因)。另一个实例在其他生成器表达式中(甚至在 target_link_libraries 中)。

关于CMake TARGET_NAME 生成器表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51231665/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com