如何将 C++ 库(例如 libjpeg-dev)添加到 Windows Docker 图像中,以便 CMake 可以检测到它们?

How can I add C++ Libraries (e.g. libjpeg-dev) into Windows Docker Image so that CMake can detect them?

我正在设置一个 Windows docker 容器,以便能够编译 CMake C++ 项目。 CMake 文件使用 find_package() CMake 命令获取包。例如:

find_package(JPEG CONFIG REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(PNG CONFIG REQUIRED)
find_package(ZLIB CONFIG REQUIRED)

现在在 linux docker 容器上安装这些库非常简单,我只需在 'CORE_PACKAGES' 中添加一行。这是我的 linux docker 文件的示例。

ENV LANG=C.UTF-8 \
    PYTHONIOENCODING=UTF-8 \
    CORE_PACKAGES="\
        # ... other trivial packages omitted  
        libjpeg-dev \
        libpng-dev \
        libssl-dev \
        zlib1g-dev \
    "

# Install core dependencies & updates
RUN apt-get update && \
    apt-get upgrade && \
    apt-get install -y $CORE_PACKAGES && \
    update-ca-certificates

我正在尝试在 Windows docker 文件中创建与此片段等效的内容。 在我的 Windows docker 文件中,我正在使用一个名为 'Choco' 的 windows 包管理器在 windows 上安装一些东西,但是 Choco 没有东西像 'libpng-dev' 和 'libjpeg-dev'。所以我的问题是,在 Windows Docker 容器上添加 C++ 开发库的标准做法是什么?

在对 Windows 和 Linux 上兼容的不同 C++ 包管理器进行了大量研究后,我遇到了 VcPkg 并强烈推荐给正在寻找的其他人一个 C++ 包管理器。

以下是我发现特别有用的一些功能

  • CMake 兼容
  • 通过脚本轻松安装,非常容易添加到 docker 容器
  • 与 Windows、Linux 和 Mac
  • 兼容
  • 大量的 C++ 包,如果不存在,您可以打开一个问题来添加它,或者您可以自己实现它并打开一个 pull request
  • 开源

使用 Vcpkg 的唯一缺点是没有本地方法可以选择某个包的旧版本。