|
你手里有一堆源码文件,有源可能来自GitHub,成软也可能是有源别人发给你的压缩包。打开一看,成软里面全是有源.py、.js、成软.java之类的有源文件,还有一堆文件夹。成软这东西怎么变成能双击运行的有源软件? 先说一个事实:源码本身不是软件。它只是成软文本。要让计算机执行它,有源中间得经过“构建”这个步骤。成软构建就是有源把人类可读的代码翻译成机器能跑的二进制程序,或者打包成可分发格式。成软 不同语言,有源路子不一样 Python写的源码,你没法直接发给别人一个.py文件让他双击运行——除非他电脑上装了Python。常见做法是用PyInstaller这类工具,把源码和Python解释器一起打包成一个.exe。这个过程叫“冻结”。命令大概长这样:pyinstaller --onefile your_script.py。跑完在dist文件夹里就有一个可执行文件了。体积会比较大,因为解释器被塞进去了。 Java源码需要先编译成.class字节码,再打成.jar包。如果要做成Windows上双击就能跑的.exe,还得用Launch4j或者jpackage再包一层。jpackage是JDK 14之后自带的,能直接生成安装包,比以前的方案省事不少。 C/C++源码最直接。装好编译器(Windows上一般用MSVC或MinGW),写个CMakeLists.txt或者Makefile,编译链接之后就是原生二进制。没有运行时依赖,体积小,启动快。但跨平台得在每个平台上分别编译。 JavaScript的情况分两种。Node.js后端项目可以用pkg或nexe打包成可执行文件。前端项目则通常用Webpack或Vite打包成静态资源,部署到服务器或者套个Electron壳变成桌面应用。 构建不是终点 编译通过只是第一步。你还需要处理依赖。源码里引用的第三方库,得确保它们也被正确打包进去。Python的requirements.txt、Node的package.json、Java的pom.xml,这些文件记录了依赖清单。构建工具会去下载它们。但有时候版本冲突会让你调半天。 资源文件也容易出问题。图片、配置文件、数据库脚本,这些不在代码里,但程序运行时需要。打包时要显式包含它们,否则用户拿到的是一个跑起来就报错的空壳。 我见过有人把源码直接压缩成zip就发给用户,说“这就是软件”。用户解压后一脸懵。这种交付方式基本等于没交付。 安装包和签名 生成可执行文件之后,如果要正式发布,还得做安装包。Windows上用Inno Setup或NSIS,macOS上做.dmg,Linux上做.deb或.rpm。安装包负责把文件放到正确位置、创建快捷方式、注册卸载程序。 还有代码签名。没有签名的.exe在Windows上会被SmartScreen拦截,用户看到“未知发布者”的警告。买个代码签名证书,一年几百到几千块不等。个人开发者经常跳过这步,但用户体验会打折扣。 持续构建 手动构建只适合一次性交付。如果代码还在更新,每次改完都手动跑一遍打包命令太蠢了。GitHub Actions、GitLab CI这些工具可以配置成推送代码后自动构建、自动生成安装包、自动上传到发布页面。配置一次,后面省心。 说到底,源码到软件的距离,取决于你愿意在构建和分发上花多少功夫。最简版本就是一条打包命令,最完整版本涉及编译、依赖管理、资源打包、签名、安装包、自动发布。中间每一步都有坑,但每一步也都有成熟工具可用。选哪条路,看你的用户是谁,以及你有多怕麻烦。 |