为什么这个cmake初始缓存文件会导致这种奇怪的错误?

时间:2017-09-25 07:19:57

标签: c++ cmake

我有一个文件/home/me/.config/Kitware/CMakeCache.txt,其中包含一些我想在任何地方使用的初始缓存设置。我运行cmake -C /home/me/.config/Kitware/CMakeCache.txt并在第3行给出了一个解析错误:

set(CMAKE_CXX_FLAGS "-march=native -mtune=native" CACHE STRING "Flags used by the compiler during all build types.")

set(CMAKE_CXX_FLAGS_DEBUG "-Og -ggdb" CACHE STRING "Flags used by the compiler during debug builds.")

这是我得到的错误:

CMake Error: Parse error in cache file /home/me/.config/Kitware/CMakeCache.txt on line 3. Offending entry: set(CMAKE_CXX_FLAGS_DEBUG "-Og -ggdb" CACHE STRING "Flags used by the compiler during debug builds.")

但是,如果我将行(添加=)更改为:

set(CMAKE_CXX_FLAGS_DEBUG "=-Og -ggdb" CACHE STRING "Flags used by the compiler during debug builds.")

它工作正常,但是我项目中生成的缓存文件的选项设置为=-Og -ggdb。实际上,=符号可以出现在整个set语句中的任何位置。但无论你把它放在哪里都会导致不同的问题。

如果我将文件重命名为/home/me/.config/Kitware/default.cmake(或CMakeCache.txt以外的任何其他内容,它也可以正常工作,并且不需要为每个选项都设置=个符号。

这是非常奇怪的行为,我不明白。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

将我的评论转化为答案

请参阅cmake.cxx:命令行中名称为cmakelists.txtcmakecache.txt的任何内容都将作为这些文件的路径。

因此,CMake忽略了您的-C选项,并尝试将CMakeCache.txt加载为实际的变量缓存文件。这些文件的格式/语法与NAME:TYPE=VALUE不同。

您可以将此行为视为CMake中的错误。或者您只是避免使用CMakeCache.txt作为初始缓存文件名。