Cmake添加一个源代码文件夹到xcode没有编译里面的源代码



我有一个项目,我正在移植到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,我希望它包括FolderA内的文件在我的Xcode项目(和任何其他支持的IDE),但没有将它们添加到文件列表编译为add_library功能?

我试图将FolderA中的文件属性设置为HEADER,并仍然将它们包含在add_library中(如这里提到的),它有点奏效,但在Xcode中,文件显示在一个扁平的层次结构中,我想保持相同的结构:

我想在Xcode:

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

我在Xcode中有什么:

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

是否有一种方法可以告诉cmake将文件夹及其内容包含到为IDE生成的项目中,而不需要将我想要编译的文件添加到文件列表中?

我的问题解决了。

如前所述,我需要在目标中使用source_group工作的文件。我使用了我提到的将FolderA的源设置为头文件的技巧,它工作得很好:

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} ... )
#...

最新更新