我想使用make来构建程序,然后通过bash脚本启动创建的可执行文件,但是bash找不到可执行文件,尽管它已创建并且可以手动启动。该问题仅存在于Gnome终端中的Linux mint 19上。 编辑:确切的错误消息是:“ / path / to / my / executable:没有这样的文件或目录”
我有一个跨平台项目,需要运行cmake,然后构建该项目,最后启动创建的可执行文件。我有一个bash脚本来自动化该过程: 编辑:它只是造成麻烦的部分;)
for TASK in $@; do
if [[ $TASK == "make" ]]; then
call cmake here, this creates a .sln or a make file
elif [[ $TASK == "build" ]]; then
if [[ $OS == 'CYGWIN_NT-10.0' ]]; then
MSBuild.exe "./build/debug/myproject.sln"
elif [[ $OS == 'Linux' ]]; then
cd ./build/debug/ && make
else
error...
fi
elif [[ $TASK == "run" ]]; then
if [[ $OS == 'CYGWIN_NT-10.0' ]]; then
./build/debug/Debug/program.exe
elif [[ $OS == 'Linux' ]]; then
./build/debug/program
else
error...
fi
else
error...
fi
done
例如,调用“ ./script.sh make build run”应调用cmake创建构建文件,然后调用构建程序(在Linux上为make或在Windows上为msbuild),然后启动创建的可执行文件。在cygwin终端的Windows 10上这可以正常工作。在Linux上,调用“ ./script.sh构建运行”失败,因为它找不到可执行文件。但是,“ ./ script.sh build && ./build/debug/program”效果很好。令人惊讶的是,“ ./ script.sh build && ./script.sh run”也按预期工作。 这是为什么? bash脚本中是否有任何Bug?为什么它不能在Cygwin上运行,但不能在Linux Mint上运行?
答案 0 :(得分:0)
好,我解决了。提出问题似乎是找到解决方案的第一步。 问题似乎是,调用“ ./script.sh构建运行”首先评估构建命令“ cd ./build/debug/ && make”。我想这样的命令将产生一个新的子shell,然后在其中评估cd和make命令,然后该shell将继续在原始工作目录中运行。显然,这不会发生,执行脚本的工作目录更改为“ ./build/debug”。下一个命令“运行”尝试执行“ ./build/debug/program”,但是由于当前工作目录已更改,因此它实际上正在寻找不存在的“ ./build/debug/build/debug/program”。 我添加了行
cd ../../
生成命令的代码。现在看起来像这样
...
elif [[ $OS == 'Linux' ]]; then
cd ./build/debug/ && make
cd ../../
else
...
我不知道为什么,但是在Linux上可以这样工作。