我正在使用带有CMake的Google Protobuf。在Linux上,Protobuf库可以通过以下方式找到:
find_package( Protobuf REQUIRED )
CMake知道在哪里寻找图书馆。我怎么能在Windows中使用它?我应该创建一个环境变量,例如PROTOBUF_LIB
吗?我查看了FindProtobuf.cmake
,但无法确定所需要的内容。
答案 0 :(得分:7)
我也很努力。更清楚。
在Windows上(7,类似于旧版Windows): 开始 - >控制面板 - >系统 - >高级系统设置 - >环境变量
然后在顶部面板或底部面板上(如果您希望它应用于其他用户在底部执行),请创建两个新变量。第一个是
创建变量后,按“确定”,然后重新启动cmake(或清理缓存)。
答案 1 :(得分:4)
Windows上的Protobuf调用find_library,它将搜索您的PATH和LIB变量。
答案 2 :(得分:4)
最新protobuf v3开箱即用CMake支持。
您可以将protobuf存储库用作子模块,然后使用
add_subdiretory("third-party/protobuf/cmake")
获得所有protobuf目标。 然后你可以用
添加对protobuf的依赖target_link_libraries(YourLibrary libprotobuf libprotobuf-lite libprotoc)
另一种可能的方式可用。使用protobuf的CMake配置,您可以构建和安装protobuf二进制文件一次,并在开发中的多个项目中使用它们:
git clone https://github.com/google/protobuf.git
mkdir protobuf\tmp
cd protobuf\tmp
cmake ..\cmake
cmake --build .
cmake --build . --target install
然后您可以将find_package
与
find_package(protobuf REQUIRED
HINTS
"C:/Program Files/protobuf"
"C:/Program Files (x86)/protobuf")
if (NOT PROTOBUF_FOUND)
message("protobuf not found")
return()
endif()
希望这有帮助。
答案 3 :(得分:0)
我找到了在Windows上使用protobuf v2和cmake的方法,并使用您的项目设置进行构建。请尝试查看完成此工作的cmake-external-packages project和protobuf-v2 CMakeLists。
事实上,我写它是因为ExternalProject_Add
是错误的(因为在构建阶段而不是生成阶段的东西)。
此CMakeLists.txt将从protobuf's github releases下载protobuf,提取并发出cmake目标,您应该使用target_link_libraries
添加引用。
使用git-subtree,git-submodule或只是将此存储库内容复制到您的存储库子文件夹。
然后添加要与add_subdiretory
一起使用的包。对于protobuf,请使用:
add_subdirectory(path/to/cmake-external-packages/protobuf-v2)
Protobuf的包含将被复制到path/to/cmake-external-packages/include
文件夹。您可以在顶级CMakeLists中自定义其位置:
set (EXTERNAL_PACKAGES_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/third-party/include
CACHE STRING "Directory for third-party include files, where include folders will be copied")
include_directories(${EXTERNAL_PACKAGES_INCLUDE_DIR})
只需为您的可执行文件引用protobuf:
add_executable(your_exe ${your_exe_sources})
target_link_libraries(your_exe libprotobuf libprotobuf-lite libprotoc)
希望这有帮助。