建立基于docker的编译环境

如果我们要在一台开发主机上搭一个编译环境,我们需要安装一堆依赖库和编译工具。如果我们有多个不同的项目同时进行,这些项目的编译工具和依赖库又都不一样,如果我们把这些东西全都塞到一台机器里,会不会有冲突呢?

如果我们想保持开发主机的干净,做到项目隔离,python里面我们可以切换env。我们也可以用docker来实现开发环境的构建,这样做还有一个好处,那就是可复用,如果你用docker搭好了一个环境,可以很容易在另一台机器上用docker image构建一个同样的环境。

下面我们想建立一个alpine linux的编译环境。

首先我们创建一个工作目录

~/$ mkdir alpine-sdk 
~/$ cd alpine-sdk
~/alpine-sdk$

然后创建Dockerfile

~/alpine-sdk$ cat Dockerfile
FROM alpine:3.7
RUN echo "http://mirrors.nju.edu.cn/alpine/v3.7/main" > /etc/apk/repositories
RUN echo "http://mirrors.nju.edu.cn/alpine/v3.7/community" >> /etc/apk/repositories
RUN apk update
RUN apk upgrade
RUN apk add git alpine-sdk abuild bison flex texinfo zlib-dev cmake bash curl-dev sqlite-dev libressl-dev glib-dev \
         gstreamer-dev gst-plugins-base-dev sbc-dev bluez-dev portaudio-dev glib-dev sbc-dev

这个容器脚本会创建一个新的docker image,它以alpine:3.7为基础进行构建,并安装一堆依赖库和编译工具

然后我们再创建一个工程环境,包括build,src和一个编译脚本。src中存放源代码,build中存放编译结果。

~/alpine-sdk$ mkdir project
~/alpine-sdk$ cd project
~/alpine-sdk/project$
~/alpine-sdk/project$ ls
build  build.sh  src
~/alpine-sdk/project$ cat build.sh

#!/bin/bash

cd /tmp/project/build
fakeroot=
cmake ../src \
-DGSTREAMER_MEDIA_PLAYER=ON \
-DGST_INCLUDE_DIRS="$fakeroot/usr/include/gstreamer-1.0;$fakeroot/usr/include/glib-2.0;$fakeroot/usr/lib/glib-2.0/include" \
-DGST_LDFLAGS="$fakeroot/usr/lib/libgstreamer-1.0.so;$fakeroot/usr/lib/libgstapp-1.0.so" \
-DPORTAUDIO=ON \
-DPORTAUDIO_LIB_PATH=$fakeroot/usr/lib/libportaudio.so \
-DPORTAUDIO_INCLUDE_DIR=$fakeroot/usr/include \
-DCURL_LIBRARY=$fakeroot/usr/lib/libcurl.so \
-DCURL_INCLUDE_DIR=$fakeroot/usr/include \
-DCMAKE_BUILD_TYPE=DEBUG \
-DBLUETOOTH_BLUEZ=ON \
-DPCC=ON \

make -j 4

然后我们创建docker image

~/alpine-sdk$ docker build -t alpine-sdk .

之后我们就可以用这个docker image来进行编译了。

~/alpine-sdk$ docker run --rm --mount type=bind,source=/home/axu/alpine-sdk/project,target=/tmp/project alpine-sdk /tmp/project/build.sh

这条指令会将本地目录mount到容器目录/tmp/project。这样子有个好处,在host主机上做的代码修改会实时同步到容器中,每次修改完代码,直接执行这条指令就可以重新编译。然后编译生成的结果也会同步到host主机上,不需要用docker cp来进行拷贝操作。

猜你喜欢

转载自www.cnblogs.com/utopia007/p/11940836.html
今日推荐