在我的项目中,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不需要(,并确保该选项不会显示为";正常的";使用者
由于参数不打算由用户更改,因此其真正的类型没有意义,因此不需要与内部项目中设置的类型一致。
对于描述,您可以将其设置为空(该参数不会显示给普通用户,还记得吗?(。或者,在描述中,您可以解释为什么在外部项目中设置变量。因此;高级";用户将看到您的描述。