单台编译机下多种编译环境管理方法

发布于:2021-01-07
阅读时长:2分钟

以用户的方式管理

说明

  1.  创建一个compiler用户     -   这个用户用于系统默认编译器的的编译     -   该用户的家目录下存放所有代码     -   所有添加的其他编译用户都处于compiler中户组(给compiler设置 SGID 可以使其下面的文件夹都默认处于compiler组里)     -   该用户家目录的所有代码都要给组用户写权限
  2.  创建用户,以 NDK 为例,%%android-ndk-r13b-linux-x86_64 对应的用户名 android-ndk-r13
  3.  将编译器安装在对应的用户家目录中
  4.  将需要的环境变量配置在用户的.bash_prefile
  5.  配置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

参考资料

linux下如何实现不同的用户对同一文件都有写权限   Linux系统之文件的SUID、SGID、Sticky权限说明

最后更新于:2024-03-27