相关疑难解决方法(0)

CMake:解析文件的顺序(缓存,工具链等)?

这似乎是一个微不足道的问题,因为CMake是一种脚本语言,一般的答案是:严格顺序.但是我遇到了几个案例,其中重要的是CMake在何时或以何种顺序解析某些文件.所以我想知道:

  1. 是否有可用的文档描述解析文件(包括内部CMake文件)的顺序?
  2. 文件顺序是否取决于CMake版本或某些CMake选项/设置/环境incl.选择的发电机或主机环境?

到目前为止我遇到的案例,上述信息很重要:

也许你知道更多.

为了找到答案,我尝试了以下内容:我已经设置了一个简单的主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)

cmake

25
推荐指数
1
解决办法
4767
查看次数

cmake:如何创建visual studio过滤器

我已经环顾四周(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)

欢迎任何帮助!

cmake filter visual-studio

18
推荐指数
1
解决办法
1万
查看次数

如何使用cmake为嵌套子目录设置Visual Studio过滤器

我有以下结构

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)

c++ cmake visual-studio visual-studio-2012

17
推荐指数
3
解决办法
8962
查看次数

在Visual Studio 2012中导入现有源文件

我想将教程的源代码添加到现有项目中,我希望将文件从我下载到的桌面上的临时文件复制到项目文件夹中.单击解决方案资源管理器中的"源文件"文件夹,然后单击Add-> Existing Item ...菜单,然后我可以添加源文件.但是,它不会复制到项目文件夹中,而是保留在其原始位置.项目只知道它,在解决方案资源管理器中显示它,并将其视为项目的一部分.

MSDN上的这个帮助页面告诉我,在Visual Studio 2010中,默认行为用于将文件复制到项目文件夹中,并且可以选择添加链接而不是通过选择"添加"将文件物理导入到项目目录中链接".但是,现在我总是只得到一个链接,并且真正的物理导入到项目文件夹中似乎是不可能的.

我可以通过文件资源管理器进行物理导入,但解决方案资源管理器不会动态更新新文件,我想从VS中执行此操作.

有办法吗?这是VS 2012中的错误吗?

visual-studio-2012

3
推荐指数
1
解决办法
9391
查看次数

标签 统计

cmake ×3

visual-studio ×2

visual-studio-2012 ×2

c++ ×1

filter ×1