cmake在docker镜像中找不到_package

时间:2021-05-04 11:56:55

标签: docker gcc cmake openssl

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

enter image description here

我可以在普通 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
)

谢谢!!

1 个答案:

答案 0 :(得分:0)

我想你的 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)