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

Bash: can't launch a program created with make on linux

我想使用 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 运行”应该调用 cmake 来创建构建文件,然后调用构建程序(make on linux 或 msbuild on windows) 然后启动创建的可执行文件。这在 cygwin 终端的 windows 10 上工作正常。在 Linux 上调用“./script.sh build 运行”失败,因为它找不到可执行文件。但是“./script.sh build && ./build/debug/program”效果很好。令人惊讶的是 "./script.sh build && ./script.sh 运行" 也能按预期工作。 这是为什么? bash 脚本中是否存在任何错误?为什么它可以在 Cygwin 上运行,但不能在 linux mint 上运行?

好的,我解决了。提出问题似乎是找到解决方案的第一步。 问题似乎是调用“./script.sh build 运行”首先评估构建命令"cd ./build/debug/ && make"。我认为这样的命令会产生一个新的子 shell,然后在其中评估 cd 和 make 命令,然后 shell 将在原始工作目录中继续。显然这并没有发生,执行脚本的工作目录被更改为“./build/debug”。下一个命令 "run" 尝试执行“./build/debug/program”,但由于当前工作目录已更改,它实际上是在寻找“./build/debug/build/debug/program”这是不存在的。 我添加了行

cd ../../

代码为build-command。现在看起来像这样

...
elif [[ $OS == 'Linux' ]]; then
    cd ./build/debug/ && make
    cd ../../
else
...

我不知道为什么,但它在 linux 上是这样工作的。