如何在Mac OS上通过Bash脚本将编译产物写入指定目录?
MacOS下Bash脚本编译产物指定目录输出问题
TLDR
- 疑问:我的问题为何被标记为Python相关问题的重复项?
- 核心需求:如何在MacOS上通过Bash脚本,将源码编译产物输出到指定文件夹?
详细问题描述
我正在学习Bash,想实现从源码编译软件,且将所有产物写入指定目录,避免使用Homebrew或MacPorts这类工具,防止污染系统环境,后续直接删除该目录就能清理所有安装内容。
我编写了如下Bash脚本:
#! /bin/bash # Error checking set -Eeuo pipefail #define variables PREFIX=$HOME/Desktop/OpenTimeLineIO PKG_CONFIG_PATH="${PREFIX}"/share/pkgconfig:"${PREFIX}"/lib/pkgconfig:"${PREFIX}"/lib64/pkgconfig LD_LIBRARY_PATH="${PREFIX}"/lib:"${PREFIX}"/lib64 CFLAGS="${PREFIX}"/include download="${PREFIX}"/download mkdir -pv "${download}" #Dependencies needed for OpenTimeline IO #Cmake cd "${download}" curl -LO https://gitlab.kitware.com/cmake/cmake/-/archive/master/cmake-master.tar.gz tar -xvzf cmake-master.tar.gz cd "${download}"/cmake-master ./bootstrap --prefix="${PREFIX}" \ --bindir="${PREFIX}"/bin \ --datadir="${PREFIX}"/share/cmake \ --docdir="${PREFIX}"/doc \ --mandir="${PREFIX}"/man \ --xdgdatadir="${PREFIX}"/share \ --no-qt-gui make make install #Python 3.x cd "${download}" curl -LO https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz tar -xvzf Python-3.10.11.tar.xz cd "${download}"/Python-3.10.11 ./configure --exec-prefix="${PREFIX}" \ --bindir="${PREFIX}"/bin \ --includedir="${PREFIX}"/include \ --libdir="${PREFIX}"/lib make make install
但实际运行结果不符合预期:
- 下载和解压步骤正常,但cmake的二进制文件生成在解压后的目录中,而非目标路径
$HOME/Desktop/OpenTimeLineIO/bin - Python编译时尝试写入
/usr/local/lib/python3.10,触发权限错误(这正是我要避免的系统目录)
我的预期目标:
- 压缩包下载到
$HOME/Desktop/OpenTimeLineIO目录下 - 在该目录内解压生成对应文件夹
- 进入解压目录,使用系统
/bin工具完成编译 - 将二进制文件、share、libs、doc等所有产物,输出到
$HOME/Desktop/OpenTimeLineIO下的对应子目录
更新:问题已解决
我调整了脚本,在执行bootstrap、make、make install等命令时,显式设置PATH环境变量,现在脚本已能将所有产物写入指定目录,最终脚本如下:
#! /bin/bash # Error checking set -Eeuo pipefail #define variables PREFIX=$HOME/Desktop/OpenTimeLineIO download=$HOME/Desktop/OpenTimeLineIO/download echo "Creating download directory on your desktop first." echo mkdir -pv "$download" echo echo "Completed!" echo echo echo "Next, downloading all dependencies for OpenTimeLineIO..." echo echo echo "Cmake standalone download and install..." echo #Dependencies needed for OpenTimeline IO #Cmake cd "$download" curl -LO https://gitlab.kitware.com/cmake/cmake/-/archive/master/cmake-master.tar.gz tar -xvzf cmake-master.tar.gz cd "$download/cmake-master" PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" ./bootstrap --prefix="$PREFIX" \ --no-qt-gui PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make install echo echo "Completed!" echo echo "PERL5x standalone download and install..." echo #PERL 5.3.X cd "$download" curl -LO https://github.com/Perl/perl5/archive/refs/tags/v5.36.1.tar.gz tar -xvzf v5.36.1.tar.gz cd "$download/perl5-5.36.1" PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" ./Configure -de -Dprefix="$PREFIX" PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make install echo echo "Completed!" echo echo "OpenSSL standalone download and install..." echo #OpenSSL cd "$download" curl -LO https://github.com/openssl/openssl/archive/refs/tags/openssl-3.1.0.tar.gz tar -xvzf openssl-3.1.0.tar.gz cd "$download/openssl-openssl-3.1.0" PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" ./Configure --prefix="$PREFIX" \ --openssldir="$PREFIX/ssl" PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make install echo echo "Completed!" echo echo "Python 3.x standalone download and install..." echo #Python 3.x cd "$download" curl -LO https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz tar -xvzf Python-3.10.11.tar.xz cd "$download/Python-3.10.11" PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" ./configure --prefix="$PREFIX" \ --disable-test-modules \ --enable-optimizations \ --enable-shared \ --with-openssl="$HOME/Desktop/OpenTimeLineIO/bin" PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make install echo echo "Completed!" echo echo "Pyside 6 standalone download and install..." echo #Pyside6 via pip3 (Already installed with Python 3.x) PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" "$HOME/Desktop/OpenTimeLineIO/bin/pip3" -vvv install pyside6 echo echo "Completed!" echo echo "Finally installing OpenTimelineIO!" echo echo "OpenTimelineIO standalone download and install..." echo #OpenTimelineIO cd "$download" curl -LO https://github.com/AcademySoftwareFoundation/OpenTimeLineIO/archive/refs/tags/v0.15.tar.gz tar -xvzf v0.15.tar.gzz cd "$download/OpenTimeLineIO-0.15" PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" ./configure --prefix="$PREFIX" PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make PATH="$HOME/Desktop/OpenTimeLineIO:$PATH" make install echo echo "Completed!"
感谢shellter和Nic3500的帮助,当前问题已解决。
内容的提问来源于stack exchange,提问作者fifer55
相关产品推荐
相关产品推荐

