cmake缓存用于提高性能的习惯用法是什么



这是发现变量值并仅在尚未缓存的情况下缓存它的正确习惯用法吗?使用路径类型只是为了举例说明。

IF(NOT $CACHE{PATH_CACHED})
#discover the PATH_CACHED value and store it in PATH_NORMAL
SET(PATH_CACHED ${PATH_NORMAL} CACHE FILEPATH "My path")
ENDIF(NOT $CACHE{PATH_CACHED})

使用if (NOT DEFINED),如下所示:

if (NOT DEFINED PATH_CACHED)
# do something expensive to compute PATH_CACHED as a normal
# variable
endif ()
set(PATH_CACHED "${PATH_CACHED}"
CACHE FILEPATH "My path")

这里有两个要点:

  1. 使用if (NOT DEFINED X)是比if (NOT X)更精确的检查,因为有人可能希望将X设置为空
  2. 无条件地将PATH_CACHED设置为计算的正常变量在一系列CMake版本中具有更一致的行为,并且当非类型化缓存变量(在命令行上设置为-DPATH_CACHED=foo(获得PATHFILEPATH类型时,还保留了相对于进程工作目录调整路径的行为。请参阅此处的文档:https://cmake.org/cmake/help/latest/manual/cmake.1.html#cmdoption-cmake-D

此外,近二十年来,不需要使用所有caps命令名或在endif()中重复该条件。

最新更新