我应该在 CMakeLists.txt w.r.t 中做啥?构建类型?
Posted
技术标签:
【中文标题】我应该在 CMakeLists.txt w.r.t 中做啥?构建类型?【英文标题】:What should I do in CMakeLists.txt w.r.t. the build type?我应该在 CMakeLists.txt w.r.t 中做什么?构建类型? 【发布时间】:2020-04-19 12:03:54 【问题描述】:我是一些使用 CMake 构建的库的作者。
如果用户指定他们运行 cmake 的构建类型 - 我可以强制执行,没问题。
但是当用户不指定构建类型时,最佳实践是什么?
我应该忽略它吗? 我应该自己选择一种构建类型作为后备/默认构建类型吗?如果有,是哪个? 我读过这个Kitware blog entry,它提出了一种解决问题的方法并将其置于库依赖项中。该方法封装在this module 中。我应该使用它吗?到目前为止,我一直在强制执行某些特定的构建类型,有人建议我也许不应该这样做。
【问题讨论】:
您之前的一个问题与该主题非常相关:***.com/q/46820155/3440745。而它的accepted answer 应该可以阐明您当前的问题。 我会说把它留给客户。我从源代码构建了数十个库,但从未见过预设的构建类型。 【参考方案1】:我认为有两个不错的选择:
-
如果
CMAKE_BUILD_TYPE
未设置并且活动生成器是单一配置,警告用户。
什么都不做。无论如何,警告只对新手用户有用。高级用户可能(但不太可能)打算这样做。在这种情况下,警告很烦人。
为了正确实现 (1),下面的代码 sn-p(放在早期,最好在 project()
之后)将起作用:
cmake_minimum_required(VERSION 3.9)
# ...
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if (NOT is_multi_config AND NOT DEFINED CMAKE_BUILD_TYPE)
message(WARNING "Must set CMAKE_BUILD_TYPE for single-config generators.")
endif ()
【讨论】:
以上是关于我应该在 CMakeLists.txt w.r.t 中做啥?构建类型?的主要内容,如果未能解决你的问题,请参考以下文章