【发布时间】:2017-07-20 12:14:53
【问题描述】:
我正在尝试编译这个项目:https://github.com/shaochuan/cmake-protobuf-example。我用 msvc2015 (x64) 成功编译了 protobuf。检查项目运行没有错误(所有结果:PASSED)。
我在cmake中设置了项目,提供了所有路径:
Protobuf_INCLUDE_DIR=C:/TK/protobuf-330/msvc2015_64/install/include
Protobuf_LIBRARY_DEBUG=C:/TK/protobuf-330/msvc2015_64/install/lib/libprotobufd.lib
Protobuf_LITE_LIBRARY_DEBUG=C:/TK/protobuf-330/msvc2015_64/install/lib/libprotobuf-lited.lib
Protobuf_PROTOC_EXECUTABLE=C:/TK/protobuf-330/msvc2015_64/install/bin/protoc.exe
Protobuf_PROTOC_LIBRARY_DEBUG=C:/TK/protobuf-330/msvc2015_64/install/lib/libprotocd.lib
Protobuf_SRC_ROOT_FOLDER=C:\TK\src\protobuf-330\src
原型项目编译没有任何错误。它包括message.cc 和message.h 文件。 CMakeLists.txt 如下所示:
INCLUDE(FindProtobuf)
FIND_PACKAGE(Protobuf REQUIRED)
INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR})
PROTOBUF_GENERATE_CPP(PROTO_SRC PROTO_HEADER message.proto)
ADD_LIBRARY(proto ${PROTO_HEADER} ${PROTO_SRC})
如果我使用以下 CMakeLists.txt 编译主项目:
PROJECT(rpc)
CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
ADD_SUBDIRECTORY(proto)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
ADD_EXECUTABLE(main main.cpp)
TARGET_LINK_LIBRARIES(main proto ${PROTOBUF_LIBRARY})
然后构建它,我收到此错误 (C1083) 说:
“无法打开包含文件:'google/protobuf/stubs/common.h':没有这样的文件或目录”c:\tktest\protobuftest\src\proto\message.pb.h
文件中的错误行是:
#include <google/protobuf/stubs/common.h>
我不知道出了什么问题。感谢任何提示。 cmake + protobuf + visual studio 2015 是否存在一些已知问题? 提前致谢。
【问题讨论】:
-
感谢 Macxx 和乌托邦。我将建议的两行都添加到原型项目 CMakeLists.txt 的末尾,并将两个项目的项目属性更改为“多线程调试 (/MTd)”。现在它可以工作了。仍然可以弄清楚问题所在。欢迎提出任何建议。
标签: c++ visual-studio-2015 cmake protocol-buffers