c++ 如何在CMake中检查目标是否为别名目标?

qni6mghb  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(138)

我正在编写一个CMake函数,它接受一个目标名称作为参数。我想检测它是静态库类型还是共享库类型,如果是共享库,则将其复制到指定目录。
我可以正确处理通过add_executable()创建的目标,add_library()直接提供源代码。我可以用以下方式处理它们:

if(TARGET ${targetName})
   message(STATUS "this is an ordinary target")
endif()

存在导入别名目标,但无法确定。我想用

if(ALIASES_TARGET ${targetName})
  message(STATUS "this is an aliases target")
endif()

但这不管用。
注意:CMake系统将创建一些“垃圾编码”命名目标,似乎代表分号字符;,我将忽略它。
如何确定给定的目标名称是否为别名目标?

function(my_fancy_function targetName dstDir)
  if(TARGET ${targetName})
     message(STATUS "this is an ordinary target")
  endif()

  if(ALIASES_TARGET ${targetName}) # how to change this line?
    message(STATUS "this is an aliases target")
  endif()
endfunction()
xeufq47z

xeufq47z1#

使用the ALIASED_TARGET target property。从文档:
如果这是别名目标,则此属性包含别名目标的名称。
前任

get_property(aliased_target TARGET "${targetName}" PROPERTY ALIASED_TARGET)
if("${aliased_target}" STREQUAL "")
  # is not an alias
else()
  # is an alias
endif()

相关问题