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



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

如果我用cmake命令从命令行定义这些值,一切都会很好:
-DTHIRDPARTY_FRAMEWORK_ROOT="$thirdpartyFrameworkPath"

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

我试着简单地用值set这个变量,但它在包含的cmake中既被定义又被使用,所以在使用之前它会被它们的默认值覆盖
使用set(... FORCE)似乎有效,但在我看来并不干净,如果他们重命名或更改自己一侧的变量类型,可能会导致令人困惑的错误。由于集(…CACHE…(语法,它还迫使我添加一个类型和一个文档字符串。

有更好的方法吗?

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

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

INTERNAL类型确保此设置将覆盖该选项(FORCE不需要(,并确保该选项不会显示为";正常的";使用者

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

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

最新更新