我有一个项目,我正在移植到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} ... )
#...