一、准备程序
程序打包的前提至少应在本地编译通过
且可按预期完成执行过程
二、创建打包脚本
在add_executable
创建的可执行目标文件同级目录下新建export.py
文件,内容为
可自行修改脚本路径,同时修改脚本中command路径,保证需要的文件可被查询到
import shutil
import os
outpath = "../export_lib" # -- 设置依赖库lib输出路径
os.makedirs(outpath) if not os.path.exists(outpath) else None
command = "ldd ./xxx" # -- xxx更换为要打包的可执行文件名
out_string = os.popen(command)
data = out_string.readlines()
data = [[data_.split()[0], data_.split()[2]] for data_ in data if len(data_.split()) == 4]
print(data)
for data_ in data:
shutil.copy(data_[1], os.path.join(outpath, data_[0]))
执行命令python3 export.py
,在上一级文件夹中生成export_lib
文件夹,程序执行所需依赖库均会复制到该目录中
三、创建执行脚本
由于程序可能需要大量的参数输入,且执行时需要导入依赖环境,因此建议直接提供sh脚本供他人使用,以节省沟通成本,以下为参考示例
新建output
文件夹,在其中放入
- 所需输入的参数文件/文件夹:
param1
,param2
,… - 执行文件
xxx
- 上一步中生成的
export_lib
文件夹
然后在output
内新建sh脚本run.sh
,内容如下
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./export_lib/
./xxx \ # -- 可执行文件
./param1/param1.suffix \ # -- 参数一
./param2/param2.suffix \ # -- 参数二
...
如下图
执行命令bash run.sh
,预期程序可正常执行,建议在别人的机器上或者虚拟机上测试一下
不同版本及不同的操作系统可能无法直接运行,Windows使用可参考Windows下通过VS将CMake工程打包发布exe