Включение внешней библиотеки в проект Docker / CMake - PullRequest
0 голосов
/ 09 декабря 2018

Я работаю над проектом cxx, используя для сборки docker и cmake, и теперь мне поручено интегрировать стороннюю библиотеку, которая у меня есть локально.

Для начала я добавил проект, содержащий только srcПапка и один файл cpp с основной функцией, а также включает в себя то, что мне нужно из библиотеки, упомянутой выше.На данный момент я уже застрял, так как мои встроенные файлы не найдены при сборке в среде докера.Когда я вызываю cmake без докера в проекте, я не получаю ошибку включения.

Мое дерево каталогов:

my_new_project
    CMakeLists.txt
    src
        my_new_project.cpp

В CMakeLists.txt есть следующее содержимое:

CMAKE_MINIMUM_REQUIRED (VERSION 3.6)

project(my_new_project CXX)
file(GLOB SRC_FILES src/*.cpp)
add_executable(${PROJECT_NAME} ${SRC_FILES})

include_directories(/home/me/third_party_lib/include)

Что необходимо для сборки в среде Docker?Нужно ли конвертировать стороннюю библиотеку в другой проект и добавить ее в качестве зависимости (аналогично тому, что я делаю с проектами из GitHub)?

Буду рад любым указателям в правильном направлении!

Редактировать :

Я скопировал весь корень стороннего проекта и теперь могу получить каталоги add include с include_directories(/work/third_party_lib/include), но так ли это?

1 Ответ

0 голосов
/ 09 декабря 2018

Когда вы создаете новое dockerized приложение, вам нужно COPY/ADD все ваши файлы src, build и cmake и определять RUN инструкции в вашем Dockerfile.Это будет использоваться для построения вашего докера image, который собирает все необходимые двоичные файлы, ресурсы, зависимости и т. Д. После создания образа вы можете запустить контейнер из этого образа в докере, который может открывать порты, связывать тома,устройства и т. д. для вашего приложения.

По сути, создайте Dockerfile:

# Get the GCC preinstalled image from Docker Hub
FROM gcc:4.9

# Copy the source files under /usr/src
COPY ./src/my_new_project /usr/src/my_new_project

# Copy any other extra libraries or dependencies from your machine into the image
COPY /home/me/third_party_lib/include /src/third_party_lib/include

# Specify the working directory in the image
WORKDIR /usr/src/

# Run your cmake instruction you would run
RUN cmake -DKRISLIBRARY_INCLUDE_DIR=/usr/src/third_party_lib/include -DKRISLIBRARY_LIBRARY=/usr/src/third_party_lib/include ./ && \
make && \
make install

# OR Use GCC to compile the my_new_project source file
# RUN g++ -o my_new_project my_new_project.cpp

# Run the program output from the previous step
CMD ["./my_new_project"]

Затем вы можете выполнить docker build . -t my_new_project, а затем docker run my_new_project, чтобы опробовать его.

Также есть несколько замечательных примеров создания приложений C ** в качестве док-контейнеров:

Подробнее об этом см. В документации докера:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...