gcc GMock宏无法识别?YCM给我错误,但Bazel构建良好

b1zrtrql  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(147)

我正在使用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,但没有成功。我做错了什么?

aydmsdu9

aydmsdu91#

-I标志指定包含的文件应位于何处。
您应该将-I标志的值设置为包含要包含的头文件的文件夹,而不是列出已编译库的路径。

tjvv9vkg

tjvv9vkg2#

我的问题是,在/usr/include中有一个gmock和一个gtest文件夹,这是一个旧版本,没有MOCK_METHOD,但有MOCK_METHOD0,... 1等。这是Clang会给予错误的版本,但我的Bazel WORKSPACE文件从Github存储库中提取了gtest,所以这就是为什么它编译正确的原因。

相关问题