我们在Mac系统上运行来自'QT' .pro文件的Shell Script
文件时遇到了一个非常奇怪的问题(对于我们的跨平台Qt项目)。
相同的.pro文件在Ubuntu机器上运行正常,没有任何问题。
我们有以下命令来运行脚本文件,该文件将.ts(Typescript)文件编译成.js(javascript)文件。
# TypeScript Compilation
{
PRE_BUILD_FILE = "$${PWD}/external/TSbuild/compileTS.sh"
DUMMY_DEPS = .
PreBuildEvent.input = DUMMY_DEPS
PreBuildEvent.output = DUMMY.txt
PreBuildEvent.commands = $$PRE_BUILD_FILE
PreBuildEvent.name = running Pre-Build steps...
# "target_predeps" tells qmake that the output of this needs to exist before we can do the rest of our compilation.
PreBuildEvent.CONFIG += no_link no_clean target_predeps
QMAKE_EXTRA_COMPILERS += PreBuildEvent
}
我们的脚本文件如下所示
BASEDIR=$(dirname "$0")
echo "===============================================";
echo "Script Directory is: " $BASEDIR;
echo "===============================================";
tsc -p "$BASEDIR/tsconfig.json";
cd $BASEDIR/../../web/js/;
rm -r autogen_*.js;
rename 's/^/autogen_/' *.js;
exit 0;
我们在构建代码时遇到以下错误
'tsc' command not found.
'rename' command not found.
注1:如果我们从终端使用该目录中的命令或从提供路径的其他目录运行它,则相同的脚本运行正常。
$sh compileTS.sh
注2:如果我们按以下方式更改脚本文件。
BASEDIR=$(dirname "$0")
echo "===============================================";
echo "Script Directory is: " $BASEDIR;
echo "===============================================";
/usr/local/bin/tsc -p "$BASEDIR/tsconfig.json";
cd $BASEDIR/../../web/js/;
rm -r autogen_*.js;
/usr/local/bin/rename 's/^/autogen_/' *.js;
exit 0;
我们收到错误消息。
env: node: No such file or directory
含义脚本文件 无法找到'tsc'的路径。现在文件没有找到'node'的路径。意味着需要提供完整的命令路径。
注3: 相同的.pro文件代码在Linux上没有任何问题。由于调用了脚本文件,我们遇到了小问题。
PreBuildEvent.commands = .$$PRE_BUILD_FILE
删除'。'使它工作。
PreBuildEvent.commands = $$PRE_BUILD_FILE
as'。'导致在与调用进程相同的目录中运行脚本。
注4:我们也尝试过以不同方式调用脚本文件,没有任何帮助
PreBuildEvent.commands = .$$PRE_BUILD_FILE
PreBuildEvent.commands = sh $$PRE_BUILD_FILE
注5:即使更新'PATH'变量,更新'bash_profile'也没有帮助。 Setting up environment variable
请帮助我们解决这个问题,由于Shell脚本知识有限以及在mac系统中调用Shell脚本的方式,可能会出现一些小错误。