【问题标题】:Cmake adding a source folder to xcode without compiling the sources insideCmake将源文件夹添加到xcode而不编译里面的源
【发布时间】:2021-12-13 23:02:17
【问题描述】:

我有一个项目要移植到 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 生成的项目中,而无需将我想要的文件添加到要编译的文件列表中?

【问题讨论】:

标签: c++ xcode visual-studio cmake


【解决方案1】:

我解决了我的问题。

here 所述,我需要使用目标中的文件以使source_group 工作。我使用了我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} ... )

#...

【讨论】:

    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多