作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
可以说我有一个包含两个独立子项目的项目。如果我正确理解了cmake,则想法是先定义一个CMakeLists.txt
的根project(...)
,然后使用add_subdirectory(...)
包含子项目。每个子项目都有自己的CMakeLists.txt
,用于定义自己的项目。这样,可以一起(使用根cmake文件)或单独(使用子项目cmake文件)构建项目。
我现在想更改CMAKE_CONFIGURATION_TYPES
。我应该在CMakeLists.txt
根目录下还是在每个子项目中?
在根目录中更改它意味着单独构建一个子项目将提供错误的配置类型。其他选项将复制cmake代码。我想我在这里错过了一些东西。
最佳答案
分解出用于设置与配置相关的设置的代码。创建具有以下内容的文件,例如SetUpConfigurations.cmake
:
if(NOT SET_UP_CONFIGURATIONS_DONE)
set(SET_UP_CONFIGURATIONS_DONE TRUE)
# No reason to set CMAKE_CONFIGURATION_TYPES if it's not a multiconfig generator
# Also no reason mess with CMAKE_BUILD_TYPE if it's a multiconfig generator.
get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(isMultiConfig)
set(CMAKE_CONFIGURATION_TYPES "Debug;Release;Profile" CACHE STRING "" FORCE)
else()
if(NOT CMAKE_BUILD_TYPE)
message("Defaulting to release build.")
set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
endif()
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY HELPSTRING "Choose the type of build")
# set the valid options for cmake-gui drop-down list
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release;Profile")
endif()
# now set up the Profile configuration
set(CMAKE_C_FLAGS_PROFILE "...")
set(CMAKE_CXX_FLAGS_PROFILE "...")
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "...")
endif()
include(..)
的开头
CMakeLists.txt
这个文件。
SetUpConfigurations.cmake
放在何处,您有两种选择,这取决于您如何组织项目,存储库:
CMakeLists.txt
,它的位置将是固定的。因此,您可以将其包含在例如include(${CMAKE_CURRENT_SOURCE_DIR}/<...>/SetUpConfigurations.cmake)
cmake
命令生成项目时,都将路径传递到CMAKE_MODULE_PATH
变量中的此存储库:cmake -DCMAKE_MODULE_PATH=<dir-of-cmake-script-repo> ...
include(SetUpConfigurations)
(无
.cmake
扩展名)的脚本。
Xcode
和
Visual Studio
是multiconfig生成器。它们尊重
CMAKE_CONFIGURATION_TYPES
的值,但是
CMAKE_BUILD_TYPE
无效,因为在处理
CMakeLists.txt
时未定义任何具体配置。稍后将在IDE的用户界面上选择它。
CMAKE_CONFIGURATION_TYPES
不感兴趣。
CMAKE_BUILD_TYPE
定义配置。处理
CMakeLists.txt
文件时,这是一个具体的值,但仍然:永远不要根据
CMAKE_BUILD_TYPE
的值做出任何决定:
if(CMAKE_BUILD_TYPE STREQUAL "Release") # WRONG!
....
endif()
关于cmake - 在带有子项目的项目中的哪里设置CMAKE_CONFIGURATION_TYPES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31546278/
Cmake FAQ 和 other places 建议查看CMAKE_CONFIGURATION_TYPES识别多配置生成器。我发现了几个不起作用的问题(例如 this one )。问题似乎是第一次调
我是一名优秀的程序员,十分优秀!