在编译大型项目时,往往会遇到在CMakeLists.txt文件中下载github依赖仓库的现象。
include(FetchContent)
FetchContent_Declare(
repo-common
GIT_REPOSITORY https://github.com/triton-inference-server/common.git
GIT_TAG ${TRITON_COMMON_REPO_TAG}
GIT_SHALLOW ON)
FetchContent_Declare(
repo-core
GIT_REPOSITORY https://github.com/triton-inference-server/core.git
GIT_TAG ${TRITON_CORE_REPO_TAG}
GIT_SHALLOW ON)
FetchContent_Declare(
repo-backend
GIT_REPOSITORY https://github.com/triton-inference-server/backend.git
GIT_TAG ${TRITON_BACKEND_REPO_TAG}
GIT_SHALLOW ON)
FetchContent_MakeAvailable(repo-common repo-core repo-backend)
但是因为墙的原因,直接下载不了代码导致编译报错。
可以通过设置代理解决。
set(ENV{http_proxy} "http://127.0.0.1:8082")
set(ENV{https_proxy} "http://127.0.0.1:8082")
但是如果你是在docker中编译时,情况又会变得复杂,设置代理会报”Failed to connect to 127.0.0.1 port 8082 after 0 ms: Connection refused“,不设置的话又连接不到github。解决方案是在docker build 加--network host,使用宿主机的网络。
#执行以下dockerfile:docker build -f dockerfile -t tritonserver:temp .
ARG BASE_IMAGE=nvcr.io/nvidia/tritonserver
ARG BASE_TAG=23.10-py3
FROM ${BASE_IMAGE}:${BASE_TAG} as base
COPY cmake-3.24.4-linux-x86_64.tar.gz /tmp/
COPY install_cmake.sh /tmp/
RUN bash /tmp/install_cmake.sh && rm /tmp/install_cmake.sh
ENV PATH="/usr/local/cmake/bin:${PATH}"
WORKDIR /app
#ENV http_proxy "http://127.0.0.1:8082",在dockerfile中设置代理同样不行,报错也是一样的
#ENV https_proxy "http://127.0.0.1:8082"
COPY CMakeLists.txt CMakeLists.txt
RUN cmake .
参考链接:https://simpleapples.com/2019/04/18/building-docker-image-behind-proxy/
还有一个发现就是在dockerfile中执行
RUN export http_proxy=127.0.0.1:8082 && export https_proxy=127.0.0.1:8082
和
ENV http_proxy "http://127.0.0.1:8082"
ENV https_proxy "http://127.0.0.1:8082"
我猜测是生效的范围不一样,ENV对当前shell和子shell都是生效的,但是export只对当前shell生效,因为如果是在dockerfile中执行另外一个shell,另外一个shell中下载github的代码的话,export是下载不下来的,但是ENV可以。
版权归原作者 zhuikefeng 所有, 如有侵权,请联系我们删除。