我正在尝试使用conan
作为包管理器运行一个conan
项目,其中该项目被编译在一个码头容器中。正如概述的这里那样,我正在使用Clion的码头集成支持。
CMakeLists.txt
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
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
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工具链配置
生成输出
-- 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]
在尝试运行可执行文件时输出
====================[ 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
以前安装它的地方找不到库。我该怎么做呢?
发布于 2022-10-02 10:04:26
多亏了@Alan的建议,我的方法中的缺陷是容器实例中缺少了卷/挂载信息。
虽然我在我的docker-compose.yml
文件中提到了这一点,但是很可能Clion并不是通过docker-compose
来运行码头容器,而是在内部使用docker run
命令。
因此,需要将以下卷装入信息附加到您的Docker Container Settings:
中:
-v /path/to/localmachine/conan-docker:/conan_docker
https://stackoverflow.com/questions/73924009
复制相似问题