You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,触发权限错误(这正是我要避免的系统目录)

我的预期目标:

  1. 压缩包下载到$HOME/Desktop/OpenTimeLineIO目录下
  2. 在该目录内解压生成对应文件夹
  3. 进入解压目录,使用系统/bin工具完成编译
  4. 将二进制文件、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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:37:08