我想学习 C/C++。这里我的要求是不使用任何 IDE。我想以以下方式运行我的 C/C++ 程序,
- 我将编写“Cpp1.cpp”//它将打印“Hello World”。
- 保存文件并关闭。
- 右键单击“Cpp1.cpp”文件。
- 在右键单击菜单选项中,我应该有一个按钮“运行 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
请注意,在这种情况下,该程序无法通过右键单击来运行:它对打开窗口和使用它们没有任何知识。