如何通过代码将值设置为 3d 方 CMake 定义的 CACHE 变量?

How to set value by code to a CACHE variable defined by 3d party CMake?

在我的项目中,CMakeLists 包含库中的其他 cmake 文件,这些依赖项需要一些缓存变量以由用户值配置。

如果我使用 cmake 命令从命令行定义这些值,则一切正常:
-DTHIRDPARTY_FRAMEWORK_ROOT="$thirdpartyFrameworkPath"

但是我可以在我自己的 CMakeLists 文件中定义(= 硬编码)这​​些值吗?
为了避免我自己的用户在配置我的项目时这样做(3d 派对配置的某些值在我的项目中是不变的),并使我自己的 cmake 界面更简单。

我试图简单地 set 变量带有一个值,但是它在包含的 cmake 中被定义和使用,所以它在被使用之前被它们的默认值覆盖。
使用 set(... FORCE) 似乎可行,但它对我来说看起来不太干净,如果他们重命名或更改变量的类型,可能会导致混淆错误。由于 set(... CACHE ...) 语法,它还迫使我添加类型和文档字符串。

有更好的方法吗?

设置 CACHE INTERNAL 变量是在外部项目中硬编码内部项目参数的正确方法:

set(THIRDPARTY_FRAMEWORK_ROOT CACHE INTERNAL "Hardcoded root for 'thirdparty'" <value>)

INTERNAL 类型确保此设置将覆盖该选项(FORCE 不需要)并确保不会为“普通”用户显示该选项。

由于该参数不打算被用户更改,其真正的类型没有意义,因此不需要与内部设置的一致项目。

至于描述,你可以设置为空(该参数不显示给普通用户,记得吗?)。或者,在描述中,您可以解释 为什么 在外部项目中设置变量。因此“高级”用户会看到您的描述。