Bash:无法启动在Linux上使用make创建的程序

时间:2019-05-30 09:29:03

标签: linux bash makefile cygwin

我想使用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上运行?

1 个答案:

答案 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上可以这样工作。