C++ 为什么这个cmake初始缓存文件会导致如此奇怪的错误?
我有一个文件C++ 为什么这个cmake初始缓存文件会导致如此奇怪的错误?,c++,cmake,C++,Cmake,我有一个文件/home/me/.config/Kitware/cmakache.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 typ
/home/me/.config/Kitware/cmakache.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.")
但是,如果我将行(添加=
)更改为:
它工作正常,但是我的项目中生成的缓存文件的选项设置为=-Og-ggdb
。事实上,=
符号可以出现在整个set
语句中的任何位置。但不管你把它放在哪里,它都会导致不同的问题
如果我将文件重命名为/home/me/.config/Kitware/default.cmake
(或CMakeCache.txt
以外的任何文件),它也可以正常工作,并且不需要为每个选项在值中签名
这是非常奇怪的行为,我不明白。这是怎么回事?把我的评论变成了答案
请参阅:命令行中名为cmakelists.txt
或cmakecache.txt
的任何内容都将作为这些文件的路径
因此,CMake忽略了此处的-C
选项,并尝试将CMakeCache.txt
作为实际的变量缓存文件加载。这些文件具有不同的格式/语法NAME:TYPE=VALUE
你可以认为这个行为是CGub中的一个bug。或者你只是避免使用<代码> CMAKECACHEC.TXT 你的初始缓存文件名。
行看起来不错。我知道这是显而易见的,但是你是否试图在没有编码的情况下保存初始缓存文件?有时候,<代码> ->代码>实际上不是一个负号(当从浏览器中复制)。@Florian-嗯,我使用的是emacs。这行代码不是从浏览器中复制出来的。我是手工输入的。这也不能解释为什么当我给同一个文件取了不同的名称时,它会工作。但是,我会尝试再次将我当前正在工作的defaults.cmake
文件复制到CMakeCache.txt
,看看是否会出现同样的错误。啊,我错了您的主CMakeLists.txt
文件是否在同一目录中?然后将CMakeCache.txt
文件作为实际缓存文件加载,并且错误在某种程度上是可以理解的(另请参阅)@Florian-Yep,cmake-C~/.config/Kitware/CMakeCache.txt-D cmake_BUILD_TYPE=Release..
我收到了一大堆“解析错误”.cmake-C~/.config/Kitware/default.cmake-D cmake_BUILD_TYPE=Release..
效果很好,给了我想要的东西。这两个不同的文件有相同的sha256哈希。@Florian-这两个命令在我在项目根目录下创建的一个新的发行版
目录中运行。我的项目根目录只有一个CMakeLists.txt
文件和一些.h
和.cpp
文件。你自己试试。我的项目根目录在~/src/employer/project\u name
中。
set(CMAKE_CXX_FLAGS_DEBUG "=-Og -ggdb" CACHE STRING "Flags used by the compiler during debug builds.")