Cmake 将源文件夹添加到 xcode 而无需编译其中的源

Cmake adding a source folder to xcode without compiling the sources inside

我有一个项目要移植到 cmake。源码架构如下:

src
 |- FolderA
     |-fileAa.cpp
     |-fileAb.cpp
     ...
 |- fileA.cpp
 |-CMakeLists.txt
 ...

文件fileA.cpp如下:

#include <FolderA/fileAa.cpp>
#include <FolderA/fileAb.cpp>

//etc

我的CMakeFiles.txt如下(来自FolderA的文件不包含在add_library函数中)

#...
add_library(... fileA.cpp ...)
#...

而且效果很好。当我尝试构建库时,如果我修改 FolderA 中的任何文件,只会重建文件 fileA.cpp 并重新制作库。

但是,当我为 Xcode 生成项目时,FolderA 中的文件没有显示。有没有办法告诉 cmake 我希望它在我的 Xcode 项目(以及任何其他支持的 IDE)中包含 FolderA 中的文件,但不将它们添加到文件列表中为 add_library 函数编译?

我尝试将 FolderA 中文件的 属性 设置为 HEADER 并且仍然将它们包含在 add_library 中(如前所述 here)并且它有点奏效, 但在 Xcode 中,文件显示在平面层次结构中,我想保持相同的结构:

我想要的Xcode:

|-FolderA
   |-fileAa.cpp
   |-fileAb.cpp
     ...
|- fileA.cpp

我在 Xcode 中有什么:

|-fileAa.cpp
|-fileAb.cpp
|-fileA.cpp
...

我有办法告诉 cmake 将文件夹及其内容包含到为 IDE 生成的项目中,而无需将我想要的文件添加到要编译的文件列表中?

我解决了我的问题。

如前所述, I need to use the files in a target for source_group to work. I used the trick that I mentionnedFolderA 的源代码设置为头文件并且运行良好:

file(GLOB COMPILED_SOURCES "*.cpp")
file(GLOB FOLDERA_SOURCES "FolderA/*.cpp")

set_source_files_properties(${FOLDERA_SOURCES} PROPERTIES HEADER_FILES_ONLY TRUE)

source_group(TREE ${PROJECT_SOURCE_DIR}/src FILES ${COMPILED_SOURCES} ${FOLDERA_SOURCES})

#...

<any function that create a target>(... ${COMPILED_SOURCES} ${FOLDERA_SOURCES} ... )

#...