Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个cmake初始缓存文件会导致如此奇怪的错误?_C++_Cmake - Fatal编程技术网

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.")