首页 > 解决方案 > cmake在docker镜像中找不到_package

问题描述

我在docker中遇到了cmake的问题,cmake在系统中找不到OpenSSL包,但我确定它已经安装了。而且我看到有关未设置所需的内部 CMake 变量的奇怪错误。

在此处输入图像描述

我可以在普通 VM 中毫无问题地编译相同的代码,但我无法让它在 docker 中工作。

有谁知道这里有什么问题?我已将完整代码上传到: https : //gitlab.com/kenjichanhkg/docker_cmake_hello_world.git 请查看“cmake_helloworld”分支。

dockerfile 看起来像这样:

FROM gcc:latest
COPY . /usr/test/src
WORKDIR /usr/test/src

RUN apt update -y && apt install -y \
    cmake \
    libssl-dev \
    git

RUN ./build.sh

CMD [ "./build/test" ]

cmake 文件如下所示:

cmake_minimum_required( VERSION 3.13 )

find_package(OpenSSL REQUIRED)
project( docker_cmake_hello_world )

add_executable(test main.cpp)

include_directories(  
        ${OPENSSL_INCLUDE_DIR}
)

target_link_libraries(
        test
        OpenSSL::SSL
)

谢谢!!

标签: dockergcccmakeopenssl

解决方案


我想你的 CMakeLists.txt 是错误的。CMake 在命令中设置其环境,project因此要find_package正确使用,您至少需要将该命令移到project. 并且include_directories命令需要在add_executable命令生效之前移动(也许你打算使用target_include_directories?)。由于 OpenSSL 已经提供了正确的导入目标 OpenSSL::SSL 您根本不需要为包含目录添加单独的命令。

适合您的测试程序的 CMakeLists.txt 文件应如下所示:

cmake_minimum_required(VERSION 3.13)

project(docker_cmake_hello_world)

find_package(OpenSSL REQUIRED)
add_executable(test main.cpp)

target_link_libraries(test PRIVATE OpenSSL::SSL)

推荐阅读