CMake文档说明命令文件GLOB:
我们不建议使用GLOB从源树中收集源文件列表.如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时请求CMake重新生成.
网络中的几个讨论线程第二个是通配源文件是邪恶的.
但是,为了使构建系统知道已添加或删除了一个源,这就足够了
touch CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
对?
然后,这比编辑CMakeLists.txt插入或删除源文件名更省力.也难以记住.所以我认为没有任何充分理由提出反对意见file GLOB.
这个论点有什么问题?
我有以下结构
Main (dir)
+-- CMakeLists.txt
+-- File.cpp
+-- File.hpp
+-- Dir (dir)
+-- CMakeLists.txt
+-- File1.cpp
+-- File1.hpp
+-- File2.cpp
+-- File2.hpp
Run Code Online (Sandbox Code Playgroud)
主/的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.11)
PROJECT(Main)
FILE(GLOB SOURCE
"*.hpp"
"*.cpp"
)
ADD_SUBDIRECTORY(Dir)
ADD_EXECUTABLE(Main ${SOURCE})
Run Code Online (Sandbox Code Playgroud)
主/ DIR /的CMakeLists.txt
FILE(GLOB LOCAL_SOURCE
"*.hpp"
"*.cpp"
)
SET(SOURCE
${SOURCE}
${LOCAL_SOURCE}
PARENT_SCOPE
)
Run Code Online (Sandbox Code Playgroud)
它在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})
Run Code Online (Sandbox Code Playgroud)
主/ DIR /的CMakeLists.txt
FILE(GLOB LOCAL_SOURCE
"*.hpp"
"*.cpp"
)
SET(SOURCE …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Visual Studio作为编辑器来浏览GitHub上的大型开源项目.目录结构如下
/module1/include/
/module1/src/
/module2/include/
/module2/src/
...
Run Code Online (Sandbox Code Playgroud)
和构建由CMakeLists.txt维护.
如果我出于某种原因坚持使用Visual Studio作为编辑器(例如,良好的IntelliSense支持),那么最佳做法是什么?
我尝试了"New - Project from Existing Code".它产生丑陋的项目结构,其中所有*.cpp文件都在源文件过滤器下,而我仍然需要手动指定一堆/*/include /目录.
我试图实际使用CMake来制作视觉工作室解决方案.由于许多Linux依赖性,它立即失败了许多严重错误.
有没有办法创建一个具有适当的目录结构和包含路径的visual studio解决方案?