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 を削除し、重複しない 2 つの行のみを使用すると、次のようになります。
source_group("src\\some_group" REGULAR_EXPRESSION "${REG1}${REC}" )
source_group("src\\some_other_group" REGULAR_EXPRESSION "${REG2}${REC}" )
動作はほぼ意図したとおりです。つまり、2 つの正規表現に一致するすべてのファイルは意図したとおりに編成されますが、残りのファイルは Xcode によって作成されたデフォルトの「ソース ファイル」グループに移動します (別の IDE には別のデフォルト フォルダがあります)。
そのため、CMake のドキュメントで反対のことが述べられていても、最初の source_group が残りの 2 つを何らかの形でオーバーライドしているように見えます (source_group に関する CMake のドキュメントからの抜粋)。
ファイルが複数のグループに一致する場合、ファイルを明示的にリストする最後のグループがあれば優先されます。ファイルを明示的にリストするグループがない場合、正規表現がファイルに一致する LAST グループが優先されます。
これは私の一部の誤解によるものですか、それとも CMake->source_group は実際に宣伝されているものとは異なる方法で動作しますか?
OSX プラットフォームで cmake バージョン 2.8.10 を使用しています。