通过更改cmake的源码实现使用代理的下载命令

    科技2025-11-19  3

    一些使用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没有识别,而继续往下执行,则会出现后续的处理脚本出现上下文对不上的错误,例如找不到函数,使用未知函数.

      另一方面,如果设置代理不通,或者对一部分,一些文件的链接不同也会出现上述的错误.

    Processed: 0.011, SQL: 8