一些使用cmake构建的项目,使用file(download)
file(download)
命令拉取网上资源构建,通过查询资料,可以通过设置系统环境变量指定cmake使用的crul使用代理,该crul是在项目源码上编译嵌入的,而非外部shell调用.如果设置的代理不生效,则需要更改源码实现.
0.具有vs ide环境
1.上cmake官网下载源码
2.使用cmake构建cmake,并生成vs项目
3.找到cmake-3.18.4\cmake-3.18.4\Source\cmFileCommand.cxx
其中cmake-3.18.4\cmake-3.18.4需要更改为自己的版本
找到以下函数添加注释标注的代码即可
bool HandleDownloadCommand(std::vector<std::string> const& args,
cmExecutionStatus& status)
{
.......
cURLEasyGuard g_curl(curl);
::CURLcode res = ::curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
check_curl_result(res, "DOWNLOAD cannot set url: ");
///
curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:port");
curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
///
.......
更改端口
因为cmake的下载命令是属于阻塞的命令,cmake会把这里阻塞的函数异步化,提早返回,同时会先建立文件,该文件长度大小为0,然后在下载数据,如果出现一些情况,比如crul的异常状态,构建脚本与cmake没有识别,而继续往下执行,则会出现后续的处理脚本出现上下文对不上的错误,例如找不到函数,使用未知函数.
另一方面,如果设置代理不通,或者对一部分,一些文件的链接不同也会出现上述的错误.