緣起
在OAuth2.0和C++ REST SDK使用示例中遇到了無(wú)法獲取令牌的問(wèn)題,最終發(fā)現(xiàn)示例用的是最新的C++ REST SDK练链,而本地安裝的不是最新的翔脱,耗費(fèi)了很多時(shí)間最終把示例跑通了;
于是之后就更新Vcpkg媒鼓,但是C++ REST SDK
安裝不上了届吁!
Vcpkg的變化
在最新的版本上,增加了庫(kù)構(gòu)建依賴绿鸣,譬如C++ REST SDK
的CONTROL
:
Source: cpprestsdk
Version: 2.9.0-1
Build-Depends: zlib [windows], openssl [windows], boost [windows]
Description: C++11 JSON, REST, and OAuth library
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
新增了Build-Depends
瓷产;也就是說(shuō),如果嘗試安裝cpprestsdk,會(huì)先安裝其依賴:zlib枚驻、openssl濒旦、boost。
下載boost太艱難
因?yàn)榫W(wǎng)絡(luò)的原因再登,在zlib安裝完成之后尔邓,就卡到了boost下載這一步......
最后無(wú)奈手動(dòng)下載了boost源碼包放在vcpkg/downloads
下才將boost安裝成功晾剖。
openssl構(gòu)建失敗
構(gòu)建openssl時(shí)失敗了,打開(kāi)vcpkg/buildtrees/openssl
下的構(gòu)建日志梯嗽,發(fā)現(xiàn)在使用源代碼下的util/copy.pl
復(fù)制文件時(shí)失敗了......
雖然以前寫(xiě)過(guò)perl腳本齿尽,但是許久不用,有些生疏灯节,用了print
大法之后循头,發(fā)現(xiàn)在執(zhí)行復(fù)制時(shí),傳遞的文件列表被包裹上了"
號(hào)炎疆,本來(lái)是復(fù)制ms/applink.c
,由于附加了"
卡骂,變成了復(fù)制"ms/applink.c"
,于是就找不到對(duì)應(yīng)文件引發(fā)報(bào)錯(cuò)形入。
我電腦上使用了Cmder,內(nèi)置了perl解釋器全跨,于是懷疑是它的原因,但是下載perl耗時(shí)太久亿遂,無(wú)奈就想辦法調(diào)整copy.pl
浓若。
在copy.pl
腳本第22行附加,看到了這樣一些信息:
$arg =~ s|\\|/|g; # compensate for bug/feature in cygwin glob...
foreach (glob "\"$arg\"")
由于構(gòu)建日志中顯示copy_if_different.pl
執(zhí)行是沒(méi)有問(wèn)題的蛇数,對(duì)比發(fā)現(xiàn)是如下的問(wèn)題:
foreach (glob "\"$arg\"") # copy.pl
foreach (glob $arg) # copy_if_different.pl
{
push @filelist, $_;
}
對(duì)perl了解過(guò)的都知道挪钓,$_
獲取的是上一次的結(jié)果,copy.pl
的寫(xiě)法里用"
包裹了字符串耳舅,從而導(dǎo)致了之前的問(wèn)題碌上。
openssl的解決方法
將調(diào)整好的copy.pl
替換掉原先的copy.pl
后即可,如何替換挽放?
- 將
copy.pl
置于vcpkg/ports/openssl
中 - 在
portfile.cmake
中將copy.pl
復(fù)制到源代碼路徑
file(COPY
${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt
${CMAKE_CURRENT_LIST_DIR}/PerlScriptSpaceInPathFixes.patch
${CMAKE_CURRENT_LIST_DIR}/ConfigureIncludeQuotesFix.patch
${CMAKE_CURRENT_LIST_DIR}/STRINGIFYPatch.patch
${CMAKE_CURRENT_LIST_DIR}/copy.pl
DESTINATION ${SOURCE_PATH})
- 修改
vcpkg\ports\openssl
中的CMakeLists.txt
,復(fù)制copy.pl
到正確的位置
由于構(gòu)建流程的限制绍赛,在上一步驟中無(wú)法將copy.pl
復(fù)制到正確的位置,需要再做一步蔓纠。
vcpkg_apply_patches(
SOURCE_PATH ${SOURCE_PATH}
PATCHES ${CMAKE_CURRENT_LIST_DIR}/PerlScriptSpaceInPathFixes.patch
${CMAKE_CURRENT_LIST_DIR}/ConfigureIncludeQuotesFix.patch
${CMAKE_CURRENT_LIST_DIR}/STRINGIFYPatch.patch
)
file(COPY
${CMAKE_CURRENT_LIST_DIR}/copy.pl
DESTINATION ${SOURCE_PATH}/util)
總結(jié)
構(gòu)建的流程萬(wàn)變不離其宗辑畦,通過(guò)了解Vcpkg的實(shí)現(xiàn),了解常規(guī)的構(gòu)造流程腿倚,碰到問(wèn)題時(shí)多分析多思考纯出,就可以解決問(wèn)題。