Initial Linux Qt OpenCV project
This commit is contained in:
30
scripts/build-linux-binary.sh
Executable file
30
scripts/build-linux-binary.sh
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
ENV_DIR="$ROOT_DIR/tools/linux-build-env"
|
||||
BUILD_DIR="$ROOT_DIR/build-linux"
|
||||
|
||||
if [[ ! -x "$ENV_DIR/bin/cmake" || ! -x "$ENV_DIR/bin/ninja" || ! -x "$ENV_DIR/bin/clang++" ]]; then
|
||||
echo "[build] 未发现项目内 Linux 二进制构建环境,先执行 setup-linux-binary-deps.sh"
|
||||
"$ROOT_DIR/scripts/setup-linux-binary-deps.sh"
|
||||
fi
|
||||
|
||||
export PATH="$ENV_DIR/bin:$PATH"
|
||||
export CMAKE_PREFIX_PATH="$ENV_DIR"
|
||||
export PKG_CONFIG_PATH="$ENV_DIR/lib/pkgconfig:$ENV_DIR/share/pkgconfig:${PKG_CONFIG_PATH:-}"
|
||||
export LD_LIBRARY_PATH="$ENV_DIR/lib:${LD_LIBRARY_PATH:-}"
|
||||
export CC="$ENV_DIR/bin/clang"
|
||||
export CXX="$ENV_DIR/bin/clang++"
|
||||
|
||||
cmake -S "$ROOT_DIR" -B "$BUILD_DIR" \
|
||||
-G Ninja \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH" \
|
||||
-DCMAKE_C_COMPILER="$CC" \
|
||||
-DCMAKE_CXX_COMPILER="$CXX" \
|
||||
-DCMAKE_INSTALL_PREFIX="$ROOT_DIR/dist-linux"
|
||||
|
||||
cmake --build "$BUILD_DIR" --parallel "$(nproc)"
|
||||
|
||||
echo "[build] 构建完成:$BUILD_DIR/chengnan"
|
||||
5
scripts/build-linux-local.sh
Executable file
5
scripts/build-linux-local.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
exec "$ROOT_DIR/scripts/build-linux-binary.sh"
|
||||
35
scripts/setup-linux-binary-deps.sh
Executable file
35
scripts/setup-linux-binary-deps.sh
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
DOWNLOAD_DIR="$ROOT_DIR/downloads"
|
||||
TOOLS_DIR="$ROOT_DIR/tools"
|
||||
MICROMAMBA_DIR="$TOOLS_DIR/micromamba"
|
||||
MICROMAMBA_BIN="$MICROMAMBA_DIR/bin/micromamba"
|
||||
ENV_DIR="$TOOLS_DIR/linux-build-env"
|
||||
|
||||
mkdir -p "$DOWNLOAD_DIR" "$TOOLS_DIR" "$MICROMAMBA_DIR"
|
||||
|
||||
if [[ ! -x "$MICROMAMBA_BIN" ]]; then
|
||||
echo "[setup] 下载 Linux micromamba 二进制包..."
|
||||
ARCHIVE="$DOWNLOAD_DIR/micromamba-linux-64.tar.bz2"
|
||||
curl -L --fail -o "$ARCHIVE" "https://micro.mamba.pm/api/micromamba/linux-64/latest"
|
||||
tar -xjf "$ARCHIVE" -C "$MICROMAMBA_DIR" bin/micromamba
|
||||
fi
|
||||
|
||||
if [[ ! -x "$ENV_DIR/bin/cmake" || ! -x "$ENV_DIR/bin/ninja" || ! -x "$ENV_DIR/bin/clang++" ]]; then
|
||||
echo "[setup] 在项目目录内创建 Linux 二进制构建环境..."
|
||||
"$MICROMAMBA_BIN" create -y -p "$ENV_DIR" -c conda-forge \
|
||||
cmake ninja clangxx qt-main opencv pkg-config
|
||||
fi
|
||||
|
||||
# README 中约定的路径,使用软链接指向隔离环境,便于 CMake 查找。
|
||||
ln -sfn "linux-build-env" "$TOOLS_DIR/compiler-linux"
|
||||
ln -sfn "linux-build-env" "$TOOLS_DIR/cmake-linux"
|
||||
ln -sfn "linux-build-env" "$TOOLS_DIR/ninja-linux"
|
||||
ln -sfn "linux-build-env" "$TOOLS_DIR/python-bin"
|
||||
ln -sfn "linux-build-env" "$TOOLS_DIR/python-venv"
|
||||
ln -sfn "../tools/linux-build-env" "$ROOT_DIR/third_party/qt-linux"
|
||||
ln -sfn "../tools/linux-build-env" "$ROOT_DIR/third_party/opencv-linux"
|
||||
|
||||
echo "[setup] 完成。所有 Linux 构建工具位于:$ENV_DIR"
|
||||
5
scripts/setup-python-venv-linux.sh
Executable file
5
scripts/setup-python-venv-linux.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
exec "$ROOT_DIR/scripts/setup-linux-binary-deps.sh"
|
||||
Reference in New Issue
Block a user