单台编译机下多种编译环境管理方法
以用户的方式管理
说明
- 创建一个
compiler
用户 - 这个用户用于系统默认编译器的的编译 - 该用户的家目录下存放所有代码 - 所有添加的其他编译用户都处于compiler
中户组(给compiler
设置 SGID 可以使其下面的文件夹都默认处于compiler
组里) - 该用户家目录的所有代码都要给组用户写权限 - 创建用户,以 NDK 为例,
%%android-ndk-r13b-linux-x86_64
对应的用户名android-ndk-r13
- 将编译器安装在对应的用户家目录中
- 将需要的环境变量配置在用户的
.bash_prefile
中 - 配置
umask
,给组与用户同样的权限
优缺点
优点
可以使不同的编译环境隔离开,不会相互影响,也方便维护
缺点
代码集中在compiler
用户的家目录下,丧失对代码的权限管理。(笔者现在也不使用这种方法了)
演示配置 android-ndk-r13 用户
adduser android-ndk-r13 -g compiler
echo "umask 002" >> /home/android-ndk-r13/.bashrc
su - android-ndk-r13
unzip android-ndk-r13b-linux-x86_64.zip
配置环境变量
在~/bash_prefile
中添加下面
export NDKROOT=/home/android-ndk-r13/android-ndk-r13b
export PATH=$NDKROOT:$PATH
INSTALLATION_PATH=/home/output/android-ndk-r13
export prefix=$INSTALLATION_PATH
export ANDROID_HOME=~/android-ndk-r13b
export TOOLCHAIN=$ANDROID_HOME/android-toolchain
export CROSS_SYSROOT=$TOOLCHAIN/sysroot
export PATH=$TOOLCHAIN/bin:$PATH
export TOOL=arm-linux-androideabi
export CC=$TOOLCHAIN/bin/${TOOL}-gcc
export CXX=$TOOLCHAIN/bin/${TOOL}-g++
export LINK=${CXX}
export LD=$TOOLCHAIN/bin/${TOOL}-ld
export AR=$TOOLCHAIN/bin/${TOOL}-ar
export RANLIB=$TOOLCHAIN/bin/${TOOL}-ranlib
export STRIP=$TOOLCHAIN/bin/${TOOL}-strip
export ARCH_FLAGS="-mthumb"
export ARCH_LINK=
export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64"
export CXXFLAGS="${CFLAGS} -frtti -fexceptions"
export LDFLAGS="${ARCH_LINK}"
配置文件的方式管理
说明
将编译环境所需的配置写在文件中,需要加载编译环境时使用 source
加载配置文件来导入编译环境。目前 CMake 编译就使用的这种方法来导入编译环境
优缺点
该方法较方便的导入编译环境,但是切换环境时旧的环境依旧会保留下来,可能会产生干扰,但是这种方法用在编译脚本中会比较好。
示例
同样以配置 android-ndk-r13 为例。
添加配置文件
创建 /opt/android-ndk/env/
目录,添加文件 ndk-r13-arm64-api21
,在文件中添加下面内容
export NDKROOT=/opt/android-ndk/android-ndk-r13b
export PATH=$NDKROOT:$PATH
INSTALLATION_PATH=~/output/android-ndk-r13
export prefix=$INSTALLATION_PATH
export ANDROID_HOME=$NDKROOT
export TOOLCHAIN=$ANDROID_HOME/android-toolchain
export CROSS_SYSROOT=$TOOLCHAIN/sysroot
export PATH=$TOOLCHAIN/bin:$PATH
export TOOL=arm-linux-androideabi
export CC=$TOOLCHAIN/bin/${TOOL}-gcc
export CXX=$TOOLCHAIN/bin/${TOOL}-g++
export LINK=${CXX}
export LD=$TOOLCHAIN/bin/${TOOL}-ld
export AR=$TOOLCHAIN/bin/${TOOL}-ar
export RANLIB=$TOOLCHAIN/bin/${TOOL}-ranlib
export STRIP=$TOOLCHAIN/bin/${TOOL}-strip
export ARCH_FLAGS="-mthumb"
export ARCH_LINK=
export CFLAGS="${ARCH_FLAGS} -fpic "
export CXXFLAGS="${CFLAGS} -frtti -fexceptions"
export LDFLAGS="${ARCH_LINK}"
保存即可,当需要切换环境时执行
source /opt/android-ndk/env/ndk-r13-arm64-api21