首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Conan依赖关系通过Clion的Docker集成执行cmake项目时出错

使用Conan依赖关系通过Clion的Docker集成执行cmake项目时出错
EN

Stack Overflow用户
提问于 2022-10-02 07:12:09
回答 1查看 112关注 0票数 0

我正在尝试使用conan作为包管理器运行一个conan项目,其中该项目被编译在一个码头容器中。正如概述的这里那样,我正在使用Clion的码头集成支持。

CMakeLists.txt

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.15)
project(FormatOutput CXX)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})

add_definitions("-std=c++11")

if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
    message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
    file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/0.18.1/conan.cmake"
            "${CMAKE_BINARY_DIR}/conan.cmake"
            TLS_VERIFY ON)
endif()

include(${CMAKE_BINARY_DIR}/conan.cmake)

conan_cmake_configure(REQUIRES fmt/9.1.0
        GENERATORS cmake_find_package)

conan_cmake_autodetect(settings)

conan_cmake_install(PATH_OR_REFERENCE .
        BUILD missing
        REMOTE conancenter
        SETTINGS ${settings})

find_package(fmt)

add_executable(main main.cpp)
target_link_libraries(main fmt::fmt)

Dockerfile

代码语言:javascript
运行
复制
FROM debian:sid

RUN DEBIAN_FRONTEND="noninteractive" apt-get update && apt-get -y install tzdata

RUN apt-get update \
  && apt-get install -y build-essential \
      gcc \
      g++ \
      gdb \
      clang \
      make \
      ninja-build \
      cmake \
      autoconf \
      automake \
      libtool \
      valgrind \
      locales-all \
      dos2unix \
      rsync \
      tar \
      python3 \
      python3-dev \
      python3-pip \
  && apt-get clean

RUN pip install conan

ENV CONAN_USER_HOME=/.conan_docker
RUN mkdir $CONAN_USER_HOME && chmod 777 $CONAN_USER_HOME

docker-compose.yml

代码语言:javascript
运行
复制
version: "3.4"

services:
  clion-cpp-env:
    image: clion/debian/cpp-env:1.0
    build: .
    platform: linux/amd64
    cap_add:
      - SYS_PTRACE
    ports:
      - 2222:22
    volumes:
      - "/tmp/conan_docker:/.conan_docker"
    restart: on-failure

Clion工具链配置

生成输出

代码语言:javascript
运行
复制
-- Conan: Using autogenerated Findfmt.cmake
-- Found fmt: 9.1.0 (found version "9.1.0") 
-- Library fmtd found /.conan_docker/.conan/data/fmt/9.1.0/_/_/package/0d8b943d676dc202f180a2598d04457e173d7b97/lib/libfmtd.a
-- Found: /.conan_docker/.conan/data/fmt/9.1.0/_/_/package/0d8b943d676dc202f180a2598d04457e173d7b97/lib/libfmtd.a
-- Library fmtd found /.conan_docker/.conan/data/fmt/9.1.0/_/_/package/0d8b943d676dc202f180a2598d04457e173d7b97/lib/libfmtd.a
-- Found: /.conan_docker/.conan/data/fmt/9.1.0/_/_/package/0d8b943d676dc202f180a2598d04457e173d7b97/lib/libfmtd.a
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/docker_conan/cmake-build-debug-docker
[Finished]

在尝试运行可执行文件时输出

代码语言:javascript
运行
复制
====================[ Build | main | Debug-Docker ]=============================
/usr/bin/cmake --build /tmp/docker_conan/cmake-build-debug-docker --target main -j 6
ninja: error: '/.conan_docker/.conan/data/fmt/9.1.0/_/_/package/0d8b943d676dc202f180a2598d04457e173d7b97/lib/libfmtd.a', needed by 'main', missing and no known rule to make it

当本地编译构建并运行时,如果使用上的Docker工具链编译,我可以构建但不能运行可执行文件。显然,conan以前安装它的地方找不到库。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2022-10-02 10:04:26

多亏了@Alan的建议,我的方法中的缺陷是容器实例中缺少了卷/挂载信息。

虽然我在我的docker-compose.yml文件中提到了这一点,但是很可能Clion并不是通过docker-compose来运行码头容器,而是在内部使用docker run命令。

因此,需要将以下卷装入信息附加到您的Docker Container Settings:中:

代码语言:javascript
运行
复制
-v /path/to/localmachine/conan-docker:/conan_docker 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73924009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档