CMake OPTION默认值失效:干净构建目录下为何不生效?
问题原因与解决方案
原因
CMake的option()命令对默认值有严格限制:第三个参数必须是布尔类型值(ON/OFF,大小写不敏感)。当传入非布尔值(比如示例中的"a;b;c")时,CMake会将其判定为FALSE,变量XXX的默认值因此被自动设为OFF,这就是干净构建目录下默认值失效的核心原因。
解决方案
如果需要定义列表类型的配置变量并设置默认值,应该使用set()命令配合CACHE选项替代option()。修改后的代码如下:
cmake_minimum_required(VERSION 3.25) project(foo) set(XXX "a;b;c" CACHE STRING "List of things") message(STATUS "XXX is ${XXX}")
在干净构建目录执行cmake ..后,输出会变为:
-- XXX is a;b;c
内容的提问来源于stack exchange,提问作者Timmmm
相关产品推荐
相关产品推荐

