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()。