package soft import ( "fmt" "os" "os/exec" log "sunhpc/pkg/logger" "sunhpc/pkg/utils" ) // compileFromSource 通用源码编译流程 func compileFromSource(srcDir, prefix string, jobs int) error { // 切换到源码目录 if err := os.Chdir(srcDir); err != nil { return fmt.Errorf("进入源码目录失败: %v", err) } // 检测 configure 脚本是否存在 if utils.FileExists("./configure") { log.Debug("执行 configure ...") cmd := exec.Command("./configure", "--prefix="+prefix) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return fmt.Errorf("configure 失败: %v", err) } } // make log.Debugf("执行 make -j%d ...", jobs) cmd := exec.Command("make", fmt.Sprintf("-j%d", jobs)) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return fmt.Errorf("make 失败: %v", err) } // make install log.Debug("执行 make install ...") cmd = exec.Command("make", "install") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return fmt.Errorf("make install 失败: %v", err) } return nil }