我有以下结构
Main (dir)
+-- CMakeLists.txt
+-- File.cpp
+-- File.hpp
+-- Dir (dir)
+-- CMakeLists.txt
+-- File1.cpp
+-- File1.hpp
+-- File2.cpp
+-- File2.hpp
主/CMakeLists.txt
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.11)
PROJECT(Main)
FILE(GLOB SOURCE
"*.hpp"
"*.cpp"
)
ADD_SUBDIRECTORY(Dir)
ADD_EXECUTABLE(Main ${SOURCE})
Main/Dir/CmakeLists.txt
FILE(GLOB LOCAL_SOURCE
"*.hpp"
"*.cpp"
)
SET(SOURCE
${SOURCE}
${LOCAL_SOURCE}
PARENT_SCOPE
)
它在 Visual Studio 中生成了以下结构
我想要的是:
我尝试了什么:
主/CMakeLists.txt
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.11)
PROJECT(Main)
FILE(GLOB LOCAL_SOURCE
"*.hpp"
"*.cpp"
)
SET(SOURCE
${LOCAL_SOURCE}
)
ADD_SUBDIRECTORY(Dir)
SOURCE_GROUP(Main FILES ${LOCAL_SOURCE})
ADD_EXECUTABLE(Main ${SOURCE})
Main/Dir/CmakeLists.txt
FILE(GLOB LOCAL_SOURCE
"*.hpp"
"*.cpp"
)
SET(SOURCE
${SOURCE}
${LOCAL_SOURCE}
PARENT_SCOPE
)
SOURCE_GROUP(Dir FILES ${LOCAL_SOURCE})
我得到什么:
请帮助我解决这个问题。
- 我不想在具有过滤器的主目录中使用单个 CmakeFile.txt
- 实际结构是多层深嵌套结构。所以请建议适用于任何级别子目录的解决方案
原文由 Jai 发布,翻译遵循 CC BY-SA 4.0 许可协议
有几种现成的或适应性强的解决方案可以模拟源树行为,例如在 Eclipse 中使用 CMake for Visual Studio(例如,来自 Zobra 的
ADD_SRC_SUBFOLDER DESTINATION_SRCS
或来自 Luca 的 GroupSources )。这是我针对您的用例的简化版本:
请参阅
source_group()
的文档,您必须为子目录提供双反斜杠。之所以我用我喜欢从 CMake 的
file()
命令文档中引用的所有源文件的专用列表替换您的file(GLOB ...)
的原因:这是我的故障安全版本(检查绝对路径)用作函数:
您将在示例中调用