在命令“project”提示当前 OP后首次运行的 cmake 设置变量值。从那里提到的测试和其他测试中,我猜想在第一次运行CMakeCache.txt
时是在执行 command 时创建的project
。
有人可以确认/纠正,引用有信誉的消息来源吗?
在命令“project”提示当前 OP后首次运行的 cmake 设置变量值。从那里提到的测试和其他测试中,我猜想在第一次运行CMakeCache.txt
时是在执行 command 时创建的project
。
有人可以确认/纠正,引用有信誉的消息来源吗?
我猜想在执行命令项目时会在第一次运行时创建 CMakeCache.txt。
它不是。
CMake 缓存(如果存在)在程序启动时被读取。否则它只初始化以下变量:
CMAKE_COMMAND
, CMAKE_CPACK_COMMAND
,CMAKE_CTEST_COMMAND
CMAKE_EXTRA_GENERATOR
, CMAKE_GENERATOR
, CMAKE_GENERATOR_INSTANCE
, CMAKE_GENERATOR_PLATFORM
,CMAKE_GENERATOR_TOOLSET
CMAKE_HOME_DIRECTORY
,CMAKE_ROOT
看这个测试:
$ cat CMakeLists.txt
get_property(vars DIRECTORY PROPERTY CACHE_VARIABLES)
message(STATUS "${vars}")
cmake_minimum_required(VERSION 3.22)
project(test NONE)
$ rm -rf build && cmake -S . -B build
-- CMAKE_COMMAND;CMAKE_CPACK_COMMAND;CMAKE_CTEST_COMMAND;CMAKE_EXTRA_GENERATOR;CMAKE_GENERATOR;CMAKE_GENERATOR_INSTANCE;CMAKE_GENERATOR_PLATFORM;CMAKE_GENERATOR_TOOLSET;CMAKE_HOME_DIRECTORY;CMAKE_ROOT
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build
该project()
命令自然会创建许多与语言和项目元数据相关的缓存条目。至少,在未启用任何语言的情况下,它会设置以下变量:
CMAKE_PLATFORM_INFO_INITIALIZED
,,,CMAKE_MAKE_PROGRAM
CMAKE_UNAME
CMAKE_VERBOSE_MAKEFILE
, CMAKE_COLOR_MAKEFILE
,CMAKE_EXPORT_COMPILE_COMMANDS
CMAKE_INSTALL_PREFIX
, CMAKE_INSTALL_SO_NO_EXE
, CMAKE_SKIP_INSTALL_RPATH
,CMAKE_SKIP_RPATH
CMAKE_PROJECT_DESCRIPTION
, CMAKE_PROJECT_HOMEPAGE_URL
,CMAKE_PROJECT_NAME
${PROJECT_NAME}_BINARY_DIR
, ${PROJECT_NAME}_IS_TOP_LEVEL
,${PROJECT_NAME}_SOURCE_DIR
但是,它不会将它们写入磁盘。只有当程序正常退出时,缓存的内容才会写入磁盘。看这个测试:
$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(test NONE)
get_property(vars DIRECTORY PROPERTY CACHE_VARIABLES)
message(STATUS "${vars}")
execute_process(COMMAND pkill cmake)
$ rm -rf build && cmake -S . -B build
-- CMAKE_COLOR_MAKEFILE;CMAKE_COMMAND;CMAKE_CPACK_COMMAND;CMAKE_CTEST_COMMAND;CMAKE_EXPORT_COMPILE_COMMANDS;CMAKE_EXTRA_GENERATOR;CMAKE_GENERATOR;CMAKE_GENERATOR_INSTANCE;CMAKE_GENERATOR_PLATFORM;CMAKE_GENERATOR_TOOLSET;CMAKE_HOME_DIRECTORY;CMAKE_INSTALL_PREFIX;CMAKE_INSTALL_SO_NO_EXE;CMAKE_MAKE_PROGRAM;CMAKE_PLATFORM_INFO_INITIALIZED;CMAKE_PROJECT_DESCRIPTION;CMAKE_PROJECT_HOMEPAGE_URL;CMAKE_PROJECT_NAME;CMAKE_ROOT;CMAKE_SKIP_INSTALL_RPATH;CMAKE_SKIP_RPATH;CMAKE_UNAME;CMAKE_VERBOSE_MAKEFILE;test_BINARY_DIR;test_IS_TOP_LEVEL;test_SOURCE_DIR
Terminated
$ stat build/CMakeCache.txt
stat: cannot stat 'build/CMakeCache.txt': No such file or directory
请注意,将pkill cmake
命令替换为message(FATAL_ERROR)
确实会保留缓存。因此,缓存通常驻留在内存中。您不需要关心缓存的确切保存时间。