#!/bin/bash # ============================================================================== # TLUSTY 和 SYNSPEC 构建脚本 # ============================================================================== set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 默认配置 BUILD_TYPE="Release" INSTALL_DIR="${INSTALL_DIR:-../install}" CLEAN_BUILD=false PARALLEL_JOBS=$(nproc) # 打印帮助信息 print_usage() { echo "用法:$0 [选项]" echo "" echo "选项:" echo " -d, --debug 使用 Debug 模式编译(默认:Release)" echo " -c, --clean 清理构建目录后重新编译" echo " -i, --install DIR 指定安装目录(默认:../install)" echo " -j, --jobs N 设置并行编译任务数(默认:$(nproc))" echo " -h, --help 显示此帮助信息" echo "" echo "示例:" echo " $0 # 使用默认设置编译" echo " $0 -d # Debug 模式编译" echo " $0 -c -j 8 # 清理并使用 8 个任务编译" echo " $0 -i /opt/tlusty # 安装到指定目录" } # 解析命令行参数 while [[ $# -gt 0 ]]; do case $1 in -d|--debug) BUILD_TYPE="Debug" shift ;; -c|--clean) CLEAN_BUILD=true shift ;; -i|--install) INSTALL_DIR="$2" shift 2 ;; -j|--jobs) PARALLEL_JOBS="$2" shift 2 ;; -h|--help) print_usage exit 0 ;; *) echo -e "${RED}未知选项:$1${NC}" print_usage exit 1 ;; esac done # 获取脚本所在目录 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "$SCRIPT_DIR" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}TLUSTY/SYNSPEC 构建脚本${NC}" echo -e "${GREEN}========================================${NC}" echo "" # 创建构建目录 BUILD_DIR="${SCRIPT_DIR}/build" if [ "$CLEAN_BUILD" = true ]; then echo -e "${YELLOW}清理构建目录...${NC}" rm -rf "$BUILD_DIR" fi mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" # 运行 CMake 配置 echo -e "${YELLOW}运行 CMake 配置...${NC}" cmake .. \ -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \ -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \ -DBUILD_TLUSTY=ON \ -DBUILD_SYNSPEC=ON \ -DBUILD_TESTS=OFF \ -DENABLE_LARGE_MODEL=ON # 编译 echo -e "${YELLOW}开始编译(使用 $PARALLEL_JOBS 个任务)...${NC}" make -j"$PARALLEL_JOBS" # 安装 echo -e "${YELLOW}安装到 $INSTALL_DIR ...${NC}" make install echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}构建完成!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo "可执行文件位置:" echo " TLUSTY: $INSTALL_DIR/bin/tlusty.exe" echo " SYNSPEC: $INSTALL_DIR/bin/synspec.exe" echo "" echo "模块文件位置:" echo " TLUSTY 模块: $INSTALL_DIR/include/tlusty/" echo " SYNSPEC 模块: $INSTALL_DIR/include/synspec/" echo ""