Cmake 如何在安装中为模式使用变量的多个目录?

Cmake 如何在安装中为模式使用变量的多个目录?,cmake,Cmake,我使用以下命令创建了一个GLOBAL属性: set_property(GLOBAL PROPERTY ADDON_CPYTHON_SOURCES "") set_property(GLOBAL APPEND_STRING PROPERTY ADDON_CPYTHON_SOURCES "${_exclude_dir};") 使用此属性,我通过以下命令添加无限数量的目录: set_property(GLOBAL PROPERTY ADDON_CPYTHON_SOURCES "") set_pr

我使用以下命令创建了一个
GLOBAL
属性:

set_property(GLOBAL PROPERTY ADDON_CPYTHON_SOURCES "")
set_property(GLOBAL APPEND_STRING PROPERTY ADDON_CPYTHON_SOURCES "${_exclude_dir};")
使用此属性,我通过以下命令添加无限数量的目录:

set_property(GLOBAL PROPERTY ADDON_CPYTHON_SOURCES "")
set_property(GLOBAL APPEND_STRING PROPERTY ADDON_CPYTHON_SOURCES "${_exclude_dir};")
我的目的是在
install
命令中排除所有这些目录:

  get_property(_exclude_dirs GLOBAL PROPERTY ADDON_CPYTHON_SOURCES)

  install(
    DIRECTORY ${CMAKE_SOURCE_DIR}
    DESTINATION ${TARGETDIR_VER}
    PATTERN ${_exclude_dirs} EXCLUDE
  )
但它不起作用。例如,如果我添加这两个目录:

"addons/example/src; addons/example1/src"
错误消息是:

install DIRECTORY given unknown argument "addons/example1/src".

如何解决此问题?

我发现您可以直接将参数添加到列表中:

set(PATTERN_SOURCES_EXCLUDE)

foreach(subdir ${subdir_list})
  list(APPEND PATTERN_SOURCES_EXCLUDE PATTERN "${subdir}" EXCLUDE)
endforeach()

install(
  DIRECTORY ${CMAKE_SOURCE_DIR}
  DESTINATION ${TARGETDIR_VER}
  ${PATTERN_SOURCES_EXCLUDE}
)

它不使用PATTERN use REGEX,而是允许将多个搜索与
|
操作结合起来。@Tsyvarev,我目前正在使用此解决方案。但是它有一个限制,首先您必须使用一个伪值初始化,这样整个目录就不会被排除在外(由“”)。我不喜欢这些黑客行为。“你必须用一个伪值初始化,这样整个目录就不会被排除”——如果你要逐个元素准备正则表达式,那么这不是创建正则表达式的唯一可能的方法。您仍然可以在list属性中收集部分正则表达式。并在
install()
命令之前从列表中创建最终正则表达式<代码>列表(连接),
列表(转换)
,…-CMake提供了许多从列表中创建内容的强大方法。至少,
foreach()。