如何使用上下文菜单(右键单击选项)运行 C/C++ 程序

如何使用上下文菜单(右键单击选项)运行 C/C++ 程序

我想学习 C/C++。这里我的要求是不使用任何 IDE。我想以以下方式运行我的 C/C++ 程序,

  1. 我将编写“Cpp1.cpp”//它将打印“Hello World”。
  2. 保存文件并关闭。
  3. 右键单击“Cpp1.cpp”文件。
  4. 在右键单击菜单选项中,我应该有一个按钮“运行 C++”。

完成以上 4 个步骤后,终端窗口中应该会出现输出或错误。

我尝试使用 Nautilus 脚本,但多次尝试后还是失败了。

请查看屏幕截图(其工作方式并不如我预期)。

参考图

我正在尝试做如下的事情, 点击此处

答案1

1.创建 Nautilus 脚本文件并使其可执行:

touch "$HOME/.local/share/nautilus/scripts/MyC++Run"
chmod +x "$HOME/.local/share/nautilus/scripts/MyC++Run"

2.以下是脚本的内容。它创建一个辅助(自动删除)脚本,该脚本在新的 gnome-terminal 中执行,因此您可以在终端窗口中看到错误消息:

#!/bin/bash -e

# Get the list of the selected in Nautilus items as an array $ITEM_LIST
IFS_BAK=$IFS
IFS=$'\t\n'
ITEM_LIST=($NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
IFS=$IFS_BAK

# Create aux script, that compile and execute the program. Run the script in gnome-terminal
compile_and_exec_program() {
        OUT="${DIR}/${NAME}.out"              # Define the name of the output file
        AUX="${DIR}/${NAME}.bash"             # Define the name of the aux script
        printf '#!/bin/bash -e\n' > "${AUX}"  # Create the auxiliary script
        printf '%s "%s" "%s" && "%s"\n' "${1}" "${OUT}" "${item}" "${OUT}" >> "${AUX}"
        printf 'rm -f "%s"\nexec bash' "${AUX}" >> "${AUX}"
        chmod +x "${AUX}"                     # Make the aux script exec and run it
        nohup gnome-terminal -x sh -c "$(echo \'"${AUX}"\')" >/dev/null 2>&1 &
}

# For each selected item: get its name, location, etc. and proceed...
for item in "${ITEM_LIST[@]}"; do

        ITEM="$(basename "${item}")"          # Get the item name (exclude the path)
        DIR="$(dirname "${item}")"            # Get the path to the item (exclude the name)
        NAME="${ITEM%.*}"                     # Get the name (exclude the extension)
        EXT="${ITEM##*.}"                     # Get the extension (exclude the name)

        # If the item is a file and its extension is `c` or `cpp`, then compile and execute
        if [ -f "$item" ]; then
                if   [ "$EXT" == "c" ];   then compile_and_exec_program "gcc -o"
                elif [ "$EXT" == "cpp" ]; then compile_and_exec_program "g++ -o"
                else notify-send "Wrong extension of the selected file: $ITEM"
                fi
        else
                notify-send "The selected item is a directory: $ITEM"
        fi
done
  • 其他说明:使用辅助脚本是在新的 gnome 终端中运行多个命令的最可靠方法,这是我在制作时发现的我的一个答案

    根据函数的输入参数compile_and_exec_program,该部分生成的辅助脚本的内容printf将类似如下:

    #!/bin/bash -e
    g++ -o /work/dir/project.cpp /work/dir/output.out && /work/dir/project.out
    rm -f /work/dir/project.bash
    exec bash
    

    其中的&&意思是(像往常一样)如果左侧的命令成功执行,则执行右侧的命令。该行将rm -f /work/dir/project.bash删除辅助脚本本身。最后一行exec bash旨在保持开放新的 gnome-terminal 窗口。

    这部分$(echo \'"${AUX}"\')旨在打印辅助脚本名称周围的单引号。当脚本名称包含一些特殊字符时,这一点很重要。我找不到其他方法来做到这一点。另一种只引用空格的方法是使用:${AUX/\ /\\ }

  • 这是一个示例脚本,它创建一个日志文件,您可以在其中看到来自该过程的错误消息。

3.以下是一个演示(来自先前版本)脚本的特点:

在此处输入图片描述

答案2

您对 C/C++ 编程有一个基本的误解:这些不是脚本,在运行时进行解释。相反,这些程序需要编译并转换为可运行的程序。

假设您的文件的名称是Cpp1.cpp,那么您需要在终端执行以下操作:

gcc -o Cpp1 Cpp1.cpp

最终的输出Cpp1将是一个可执行二进制文件,可以使用命令运行。./Cpp1 请注意,在这种情况下,该程序无法通过右键单击来运行:它对打开窗口和使用它们没有任何知识。

相关内容