Gmock宏未认识?YCM给了我错误,但是Bazel建立了良好

GMock macros not recognized? YCM gives me error, but Bazel builds fine

本文关键字:但是 错误 Bazel 建立 Gmock YCM      更新时间:2023-10-16

我正在使用YCM为我的VIM设置提供错误检查。在我使用mock_method时,它引发了错误,说" C 需要所有声明的类型说明符",但Bazel构建良好。我想我缺少某种标志?

这个家伙有同样的问题,但没有回答答案:

https://github.com/ycm-core/youcompleteme/issues/1332

从该人的答复来看,我知道我的YCM配置是什么,所以我检查了一下,但无济于事。

这是简单的代码

#include <netinet/in.h>
#include <gmock/gmock.h>
#include <string>
#include "socket_helper.h"
namespace Proj {
class MockSocketHelper : public SocketHelper {
 public:
  MOCK_METHOD(ssize_t, write, (std::string msg), (override));
  MOCK_METHOD(std::string, read, (size_t n_bytes), (override));
};

在mock_method上,我得到的" C 需要所有声明的类型说明符",对我来说,这告诉我它无法识别宏。

这是我的YCMD配置中的基本标志:

BASE_FLAGS = [
        '-Wall',
        '-Wextra',
        '-Werror',
        '-Wno-long-long',
        '-Wno-variadic-macros',
        '-fexceptions',
        '-ferror-limit=10000',
        '-DNDEBUG',
        '-std=c++11',
        '-xc++',
        '-I/usr/lib/',
        '-I/usr/src/googletest/googletest/libgtest.a',
        '-I/usr/src/googletest/googletest/libgtest_main.a',
        '-isystem /usr/src/googletest/googletest/libgtest.a',
        '-isystem /usr/src/googletest/googletest/libgtest_main.a',
        '-I/usr/include/'
        ]

您可以看到,我尝试将libgtest.a链接到无济于事。我在做什么错?

-I标志指定应该找到包含的文件的位置。

您应该将-I标志的值设置为包含您包括的标头的文件夹,而不是列出通往编译的库的路径。

我的问题是,在/usr/include中有一个gmock和gtest文件夹,它是一个旧版本,没有mock_method,而是mock_method0,... 1等。是Clang版本会出现错误,但是我的Bazel Workspace文件从GitHub repo中提取了Gtest,因此这就是为什么它正确编译的原因。

相关文章: