$<TARGET_NAME:...>标记
...为目标名称。如果将目标导出到多个从属导出集,则这是必需的。的...必须是它可能不包含发电机表达式靶的文字名称。
我试图理解突出显示的部分。
首先,我想看看我是否正确理解了依赖导出集的概念。如果目标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::
)
Run Code Online (Sandbox Code Playgroud)
在这里,我们有两个愚蠢的INTERFACE图书馆。第一个,define_a简单地传播-DA到链接到它的目标。第二个,define_a_tgt添加 的定义A_TGT,使其等于包含目标名称的字符串define_a。
在构建界面中,这将扩展为 simple define_a,但在导出它之后,CMake 将替换$<TARGET_NAME:define_a>为test::define_a(由于 的NAMESPACE参数install(EXPORT))。
这有点做作,但它确实显示了一个实例,其中 CMake 尚未意识到目标正在被命名(它会target_link_libraries自动转换目标,无需此 Genex)。另一个实例位于其他生成器表达式内部target_link_libraries(甚至在 中)。
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |