條件:git cmake vs2017
參考https://www.cnblogs.com/tangxin-blog/p/5698137.html
修改以下即可
rem 設(shè)置VS工具集,相當于指定VS版本,取決于VS的安裝路徑(這里是企業(yè)版)
set VS_DEV_CMD="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
rem 設(shè)置工程文件夾名字,用來區(qū)分不同的VS版本
set "BUILD_PATH=protobuf_%PROTOBUF_VESION%_vs2017_sln"
CMake Error: does not match the source,這個需要刪除cmake緩存(CMakeCache.txt,如果找不到直接搜索)
也可以直接用cmake-gui進入界面直接操作。
如果在解決方案中使用建議是設(shè)置到解決方案下的目錄(一般用在pb的升級中),這里產(chǎn)生的sln可以修改源碼,生成c++和c#等其他語言pb資源(lib、dll)。
附件:

one_key_download_and_build_protobuf.bat
echo off & color 0A
rem 參考文章 https://github.com/google/protobuf/blob/master/cmake/README.md
rem 默認當前操作系統(tǒng)已安裝 git 和 cmake,并配置好了環(huán)境變量
set "WORK_DIR=%cd%"
echo %WORK_DIR%
rem 設(shè)置所需要的Protobuf版本,最新版本可以在github上查到 https://github.com/google/protobuf
set "PROTOBUF_VESION=v3.5.0"
echo %PROTOBUF_VESION%
set "PROTOBUF_PATH=protobuf_%PROTOBUF_VESION%"
echo %PROTOBUF_PATH%
rem 從githug上拉取protobuf源代碼
git clone -b %PROTOBUF_VESION% https://github.com/google/protobuf.git %PROTOBUF_PATH%
rem 從github上拉取gmock
cd %PROTOBUF_PATH%
git clone -b release-1.7.0 https://github.com/google/googlemock.git gmock
rem 從github上拉取gtest
cd gmock
git clone -b release-1.7.0 https://github.com/google/googletest.git gtest
cd %WORK_DIR%
rem 設(shè)置VS工具集,相當于指定VS版本,取決于VS的安裝路徑
set VS_DEV_CMD="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
rem 設(shè)置工程文件夾名字,用來區(qū)分不同的VS版本
set "BUILD_PATH=protobuf_%PROTOBUF_VESION%_vs2017_sln"
echo %BUILD_PATH%
if not exist %BUILD_PATH% md %BUILD_PATH%
cd %BUILD_PATH%
rem 設(shè)置編譯版本 Debug Or Release
set "MODE=Release"
echo %MODE%
if not exist %MODE% md %MODE%
cd %MODE%
echo %cd%
set "CMAKELISTS_DIR=%WORK_DIR%\%PROTOBUF_PATH%\cmake"
echo %CMAKELISTS_DIR%
rem 開始構(gòu)建和編譯
call %VS_DEV_CMD%
echo %CMAKELISTS_DIR%
cmake add_subdirectory %CMAKELISTS_DIR%
cmake %CMAKELISTS_DIR% -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%MODE%
call extract_includes.bat
nmake /f Makefile
echo %cd%
echo %PROTOBUF_VESION%
echo %BUILD_PATH%
echo %MODE%
pause