如果你没有设置CMAKE_BUILD_TYPE
,那么默认情况下,它不会被缓存。我应该缓存它吗?例如,我应该:
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" )
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Type of build (Debug, Release etc." FORCE)
endif()
字符串
或者只是:
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" )
endif()
型
或者这真的不重要吗?
2条答案
按热度按时间r8xiu3jd1#
缓存 CMAKE_BUILD_TYPE 对cmake-gui很有用:你的项目的用户可以很好地改变构建类型。
有一个很好的模板用于设置默认值 CMAKE_BUILD_TYPEfrom Kitware:
字符串
gtlvzcf82#
CMake缓存中的
CMAKE_BUILD_TYPE
用户通常会通过命令行用
cmake -D ...
定义CMAKE_BUILD_TYPE
,所以这确实会生成一个缓存条目。即使你没有给予
CMAKE_BUILD_TYPE
作为单个配置makefile生成器,CMake也会自动创建一个空的缓存条目(这样用户就可以在例如cmake-gui
中进行选择):字符串
如果CMake的平台/服务器定义通过
CMAKE_BUILD_TYPE_INIT
没有给出CMAKE_BUILD_TYPE
的默认值,如Windows-MSVC
:型
设置
CMAKE_BUILD_TYPE
默认值所以是的,如果你想强制一个在GUI中可见的默认值,那么设置缓存变量(见@Tsyvarev答案)。
我通常不会强制缓存默认值,我只是设置一个临时值,如果没有给出。这允许例如我的项目作为一个子项目使用。
但那是你个人品味的问题。
在我的项目中,这些默认的
CMAKE_BUILD_TYPE
检查看起来有点复杂,因为我允许更多的用例:型
但我可能应该更新这段代码,以考虑新的
GENERATOR_IS_MULTI_CONFIG
全局属性(而不是检查CMAKE_NO_BUILD_TYPE
)。参考资料