【发布时间】:2013-06-26 05:19:09
【问题描述】:
在 CMake 中使用 source_group 来组织源文件(在本例中为 Xcode)结果比预期的更乏味。
set(REG1 ".*/some_folder1/")
set(REG2 ".*/some_folder2/")
set(REC ".*([.]cpp|[.]c)")
source_group("src" REGULAR_EXPRESSION "${REC}" )
source_group("src\\some_group" REGULAR_EXPRESSION "${REG1}${REC}" )
source_group("src\\some_other_group" REGULAR_EXPRESSION "${REG2}${REC}" )
我希望以上内容将 some_folder1 中的所有源文件放在 IDE 的 src/some_group 中,将 some_folder2 放在 src/some_other_group 中,其余文件直接放在 src 组中。
但是,结果是所有文件都直接进入了 src 组。
如果我删除第一个 source_group-line 并且只使用两个不重叠的:
source_group("src\\some_group" REGULAR_EXPRESSION "${REG1}${REC}" )
source_group("src\\some_other_group" REGULAR_EXPRESSION "${REG2}${REC}" )
行为几乎符合预期。 IE。所有匹配这两个正则表达式的文件都按预期组织,但其余文件进入 Xcode 创建的默认“源文件”组(不同的 IDE 将有不同的默认文件夹)。
所以看起来第一个 source_group 以某种方式覆盖了其余两个,即使 CMake 的文档说明相反(摘自 CMake 关于 source_group 的文档):
如果一个文件匹配多个组, 明确列出文件的 LAST 组将受到青睐,如果有的话。如果没有组 显式列出文件,其正则表达式与文件匹配的 LAST 组 会受到青睐。
这是由于我的一些误解还是 CMake->source_group 实际上的行为方式与宣传的不同?
我在 OSX 平台上使用 cmake 版本 2.8.10。
【问题讨论】:
-
附言。我知道在我给出的特定示例中,映射是“文件夹-> 组”,可以在文件(GLOB ...)级别上进行组织,但真正的问题比这更普遍。