这似乎是一个微不足道的问题,因为CMake是一种脚本语言,一般的答案是:严格顺序.但是我遇到了几个案例,其中重要的是CMake在何时或以何种顺序解析某些文件.所以我想知道:
到目前为止我遇到的案例,上述信息很重要:
CMakeLists.txt文件外部的作用域调用变量监视:在"配置"步骤完成之前,在CMake中执行命令或宏作为最后一步也许你知道更多.
为了找到答案,我尝试了以下内容:我已经设置了一个简单的主CMakeLists.txt,如下所示,并运行cmake --trace …以分析解析顺序.
cmake_minimum_required(VERSION 2.8)
include(BeforeProjectCmd.cmake)
project(ParserTest CXX)
add_subdirectory(LibTarget1)
add_subdirectory(LibTarget2)
add_executable(ExeTarget Test.cpp)
variable_watch(CMAKE_BACKWARDS_COMPATIBILITY)
Run Code Online (Sandbox Code Playgroud)
然后,当我运行时,cmake --debug-output --trace -G"Visual Studio 12 2013" -DCMAKE_TOOLCHAIN_FILE:FILE_PATH=Toolchain.txt我得到了一个很长的痕迹,我试图总结:
# Begin try to read
CMakeCache.txt
${CMAKE_BINARY_DIR}/CMakeCache.txt
PreLoad.cmake
${CMAKE_BINARY_DIR}/PreLoad.cmake
# End try to read
? CMakeLists.txt(1): cmake_minimum_required(VERSION 2.8 )
? CMakeLists.txt(3): include(BeforeProjectCmd.cmake )
?
?? BeforeProjectCmd.cmake
?
? CMakeLists.txt(5): project(ParserTest CXX )
?? share/cmake-3.2/Modules/CMakeDetermineSystem.cmake
??
??? Toolchain.txt
?
?? ${CMAKE_PLATFORM_INFO_DIR}/CMakeSystem.cmake
??
??? …Run Code Online (Sandbox Code Playgroud) 我已经环顾四周(StackOverflow等),我正在尝试使用cmake生成Visual Studio过滤器.我有以下文件夹:
src/math
src/import
src/ui
我想生成如上所述的过滤器.
"math":包含src/math
"import"中的所有cpp&h文件
:包含src/import "ui"中的所有cpp&h文件:包含src/ui中的所有cpp&h文件
我尝试了几种解决方案,但似乎都没有工作!
这是CMakeList.txt中代码的最后一个版本:
src/math
src/import
src/ui
Run Code Online (Sandbox Code Playgroud)
欢迎任何帮助!
我有以下结构
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) 我想将教程的源代码添加到现有项目中,我希望将文件从我下载到的桌面上的临时文件复制到项目文件夹中.单击解决方案资源管理器中的"源文件"文件夹,然后单击Add-> Existing Item ...菜单,然后我可以添加源文件.但是,它不会复制到项目文件夹中,而是保留在其原始位置.项目只知道它,在解决方案资源管理器中显示它,并将其视为项目的一部分.
MSDN上的这个帮助页面告诉我,在Visual Studio 2010中,默认行为用于将文件复制到项目文件夹中,并且可以选择添加链接而不是通过选择"添加"将文件物理导入到项目目录中链接".但是,现在我总是只得到一个链接,并且真正的物理导入到项目文件夹中似乎是不可能的.
我可以通过文件资源管理器进行物理导入,但解决方案资源管理器不会动态更新新文件,我想从VS中执行此操作.
有办法吗?这是VS 2012中的错误吗?