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 mentionned 将 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} ... )
#...
我有一个项目要移植到 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 生成的项目中,而无需将我想要的文件添加到要编译的文件列表中?
我解决了我的问题。
如前所述,source_group
to work. I used the trick that I mentionned 将 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} ... )
#...