docker - 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
)
谢谢!!
解决方案
我想你的 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)
推荐阅读
- reactjs - 使用 react-beautiful-dnd 删除元素后,如何保持适当的间距?
- python - Pandas read_csv 指定 AWS 配置文件
- flutter - 如何使用 Flutter 中的 Provider 增加电子商务购物车中的商品数量
- python - 使用列表中的数据编写 csv 文件
- jquery - jQuery & CSS 选择器
- c# - C# - WPF - 从另一个线程上的另一个类更新 UI
- python - Python If 语句和 While 循环 Bug 与递归
- r - 要在 for 循环中指定创建的数据框的名称
- azure - 寻找一种替代解决方案来处理从 Azure Blob 到 Azure SQL DB 的数万个 JSON
- python - BERT 输出应该是 text_A + text_B = 一些分类,但它正在做 text_A = 一些分类和 text_b = 一些分类