Как запустить программу на C/C++ с помощью контекстного меню (опция правой кнопки мыши)
Я хочу изучать C/C++. Здесь мое требование не использовать какую-либо IDE. Я хочу запустить мою программу на C / C++ следующим образом,
- Я напишу "Cpp1.cpp" //, который напечатает "Hello World".
- Сохраните файл и закройте.
- Щелкните правой кнопкой мыши файл "Cpp1.cpp".
- В опциях меню правой кнопки мыши у меня должна быть кнопка "Запустить C++".
После выполнения вышеуказанных 4 шагов в окне терминала должны появиться выходные данные или ошибки.
Я пытался сделать это, используя скрипт Nautilus, но он потерпел неудачу после нескольких испытаний.
Пожалуйста, смотрите скриншот (который не работает так, как я ожидаю).
Я пытаюсь сделать, как показано ниже, проверьте здесь
2 ответа
1. Создайте файл скрипта Nautilus и сделайте его исполняемым:
touch "$HOME/.local/share/nautilus/scripts/MyC++Run"
chmod +x "$HOME/.local/share/nautilus/scripts/MyC++Run"
2. Вот содержание скрипта. Он создает вспомогательный (автоматически удаляемый) скрипт, который выполняется в новом gnome-терминале, поэтому вы можете увидеть сообщения об ошибках в окне терминала:
#!/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.Эта часть
$(echo \'"${AUX}"\')
намеревается напечатать одинарные кавычки вокруг имени вспомогательного сценария. Это важно, когда имя скрипта содержит некоторые специальные символы. Я не мог найти другой способ сделать это. Другой способ указать только пробелы - это использовать:${AUX/\ /\\ }
,Вот пример сценария, который создает файлы журналов, где вы можете увидеть сообщения об ошибках процесса.
3. Вот демонстрация (из предыдущей версии) возможностей скрипта:
У вас есть базовое недопонимание в отношении программирования на C/C++: это не сценарии, интерпретируемые во время выполнения. Вместо этого эти программы должны быть скомпилированы и преобразованы в работоспособные программы.
Предполагая, что имя вашего файла Cpp1.cpp
, тогда вам нужно будет выполнить следующий терминал:
gcc -o Cpp1 Cpp1.cpp
Результирующий вывод, Cpp1
будет исполняемым двоичным файлом, который можно запустить с помощью команды ./Cpp1
Обратите внимание, что в этом случае эту программу нельзя запустить, щелкнув по ней правой кнопкой мыши: она не имеет никаких знаний об открытии окон и их использовании.