在Docker / CMake项目中包含一个外部库

时间:2018-12-08 22:50:17

标签: docker cmake

我正在使用docker和cmake进行cxx项目构建,现在我的任务是集成我在本地拥有的第三方库。

要开始使用,我添加了一个项目,该项目仅包含src文件夹和具有主要功能的单个cpp文件,还包括上述库中需要的包含的项目。此时,我已经陷入困境,因为在docker环境中构建时找不到包含的文件。当我在项目上没有docker的情况下调用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中的项目所做的工作)?

如果有任何指向正确方向的指针,我将感到高兴!

编辑

我已经复制了整个第三方项目的根目录,现在可以使用include_directories(/work/third_party_lib/include)获取添加包含目录,但这是可行的方法吗?

1 个答案:

答案 0 :(得分:1)

在构建新的dockerized应用时,您需要COPY/ADD的所有src,构建和cmake文件,并在RUN中定义Dockerfile指令。这将用于构建可捕获所有必需的二进制文件,资源,依赖项等的docker image。构建映像后,您可以在docker上从该映像运行容器,该容器可以暴露端口,绑定卷,设备等。

因此,基本上,创建您的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 **应用构建为Docker容器的例子也很少:

有关此的更多信息,请参考docker文档: