相关疑难解决方法(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的自定义配置类型需要多次cmake运行才能正确显示.这是有意的吗?

语境:

我正在将一个项目从简单的Makefiles迁移到CMake,以添加对多个编译器(gfortran + ifort)和操作系统(Windows + Linux)的支持.当我完成整个过程时,我正在尝试简化CMake行为并为用户提供一些额外的功能.

在对可能的操作系统和使用的编译器组合进行规范化和调整编译器选项之后,添加用户定义的构建类型"DEBUGVERBOSE"并启用所有检查和警告似乎是合理的.因为我们正在处理非常古老的Fortran 77代码,所以这些设置会生成> 3000个警告,这就是为什么我不想在标准的Debug构建类型中包含所有警告的原因.对于将来的代码清理和调试,它似乎是合适的.


问题:

我想将这个用户定义的构建类型"DEBUGVERBOSE"添加到Visual Studio 2012中的可用配置列表中.同时我想摆脱cmake生成的构建类型"MinSizeRel"和"RelWithDebInfo"来简化用户界面(因为我们从不使用这些配置).

根据CMake-Wiki - 如何使用定制的扩展构建模式?我按如下方式设置我的构建类型:

# Set Project Name and supported Languages(optional)
project (s4 Fortran C)
# Set Version Number
set (S4_VERSION_MAJOR 1)
set (s4_VERSION_MINOR 0)

# Set Source Language
enable_language (Fortran)

...

if(WIN32)
  # Release flags
  set(CMAKE_Fortran_FLAGS_RELEASE " ${CMAKE_Fortran_FLAGS_RELEASE} /D__WIN_intel__ /assume:byterecl")
  # Debug Flags
  set(CMAKE_Fortran_FLAGS_DEBUG " ${CMAKE_Fortran_FLAGS_DEBUG} /D__WIN_intel__ /assume:byterecl /Od /warn:all /check:all
                                                              /warn:notruncated_source /warn:nodeclarations /warn:nounused") 
  # verbose Debug flags (user-defined build type)
  set(CMAKE_Fortran_FLAGS_DEBUGVERBOSE  " /debug:full /dbglibs …
Run Code Online (Sandbox Code Playgroud)

cmake visual-studio visual-studio-2012

6
推荐指数
1
解决办法
3810
查看次数

删除构建目标:RelWithDebInfo,MinSizeRel

在我们的项目中,我们使用CMake和两个不同的构建目标:Debug和Release.

Clion确实提供了两个额外的构建目标:RelWithDebInfo和MinSizeRel.现在,当Clion创建CMake缓存(对于所有4,我们只使用2)时,它会失败,因为除了调试或发布之外我们不允许其他构建目标.

您的第一个解决方法是在主CMakeList.txt上使用它:

if(NOT ${CMAKE_BUILD_TYPE} MATCHES "Debug|Release")
    return()
endif()
Run Code Online (Sandbox Code Playgroud)

但默认情况下是否可以从Clion禁用这两个配置?

cmake clion

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

如何在没有调试符号和没有优化的情况下创建cmake构建配置?

我认为默认配置类型可以像这样描述:

Debug          : w/ debug symbols, w/o optimization
Release        : w/o debug symbols, w/ optimization
RelWithDebInfo : w/ debug symbols, w/ optimization
MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries
Run Code Online (Sandbox Code Playgroud)

但我需要新的:

MyConf         : w/o debug symbols, w/o optimization
Run Code Online (Sandbox Code Playgroud)

那么,如何创建呢?

c++ cmake

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

标签 统计

cmake ×4

c++ ×1

clion ×1

visual-studio ×1

visual-studio-2012 ×1