用过Qt Creator的朋友都知道,编译生成的可执行文件并没有在工程目录下,而是在 ../xxx-build-Desktop-[Debug|Release]/中。如果我们想运行这个生成的可执行文件,那么我们要找到这个目录并执行这个目录下的目标文件。 我写的这个脚本就是自动查找目标文件所
我写的这个脚本就是自动查找目标文件所在的目录,并执行目标文件。给咱们程序员朋友减轻点来回切换的工作量。
工作原理是:
1. 从 *.pro 工程文件中提取 TARGET 变量的值,即生成的可目标文件名。
2. 从 *.pro.user 工程临时文件中找到目标文件所在的目录。通常会有两个目录,一个是Debug目录,别一个是Release目录。从QML文件中提供BuildDirectory的值使用awk命令进行两重分割。我承认这种做法很低极,有好建议的朋友请留言。
3. 然后将目标文件路径与目标文件名组合在一起,形成目标文件名全称,并执行。
Qt Creator
#!/bin/bash run () { if [ ! -f *.pro ] || [ ! -f *.pro.user ]; then echo "Warn: Can't find \"*.pro\" or \"*.pro.user\" files !" return fi # 从*.pro.user文件中提供目标生成路径,用awk切割了两次 build_path_array=($(grep "BuildDirectory" *.pro.user | grep $1\ | awk -F\< '{print $2}' \ | awk -F\> '{print $2}' \ | uniq)) # 从*.pro文件中提供目标文件名,即TARGET变量的值 exec_file_name=$(echo $(awk -F\= '/TARGET/ {print $2}' *.pro)) for build_path in ${build_path_array[@]} do # 将目标路径与目标文件名拼接成目标文件全称 target=${build_path}/$exec_file_name if [ -f "$target" ]; then # 检查目标文件是否存在 echo "Run \"$target\"." $target & # 执行目标文件 break fi done } help () { echo " Usage: Run executale file directly." echo " run d|D|debug|Debug #run debug file" echo " run r|R|release|Release #run release file" } ################################################################# # start here case $1 in D|d|Debug|debug) run Debug;; R|r|Release|release) run Release;; *) help esac