我有一个文件/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
以外的任何其他内容,它也可以正常工作,并且不需要为每个选项都设置=
个符号。
这是非常奇怪的行为,我不明白。这是怎么回事?
答案 0 :(得分:1)
将我的评论转化为答案
请参阅cmake.cxx
:命令行中名称为cmakelists.txt
或cmakecache.txt
的任何内容都将作为这些文件的路径。
因此,CMake忽略了您的-C
选项,并尝试将CMakeCache.txt
加载为实际的变量缓存文件。这些文件的格式/语法与NAME:TYPE=VALUE
不同。
您可以将此行为视为CMake中的错误。或者您只是避免使用CMakeCache.txt
作为初始缓存文件名。