web-dev-qa-db-fra.com

Comment exécuter un programme C / C ++ en utilisant le menu contextuel (option de clic droit)

Je veux apprendre le C/C++. Ici, mon exigence est de ne pas utiliser d'IDE. Je veux exécuter mon programme C/C++ de la manière suivante,

  1. Je vais écrire "Cpp1.cpp" // qui imprimera "Hello World".
  2. Enregistrez le fichier et fermez-le.
  3. Faites un clic droit sur le fichier "Cpp1.cpp".
  4. Dans les options du menu clic droit, je devrais avoir un bouton "Exécuter C++".

Après avoir suivi les 4 étapes ci-dessus, une sortie ou des erreurs doivent apparaître dans la fenêtre du terminal.

J'ai essayé d'utiliser le script Nautilus, mais il a lamentablement échoué après plusieurs essais.

S'il vous plaît voir la capture d'écran (qui ne fonctionne pas comme prévu).

Reference image

J'essaie de faire comme ci-dessous, cochez ici

1
Ravi Teja

1. Créez le fichier de script Nautilus et rendez-le exécutable:

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

2. Voici le contenu du script. Il crée un script auxiliaire (supprimé automatiquement), qui est exécuté dans un nouveau terminal gnome. Vous pouvez ainsi voir les messages d'erreur dans la fenêtre du 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
  • Explications supplémentaires : L'utilisation d'un script auxiliaire est le moyen le plus robuste d'exécuter plusieurs commandes dans un nouveau terminal gnome, que j'ai trouvé pendant que je travaillais. ne de mes réponses .

    En fonction des paramètres d'entrée de la fonction compile_and_exec_program, le script auxiliaire généré par la section printf sera semblable à:

    #!/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
    

    && signifie (comme d'habitude) si la commande située à gauche est exécutée avec succès, exécutez la commande située à droite. La ligne rm -f /work/dir/project.bash supprimera le script auxiliaire lui-même. La dernière ligne exec bash a l'intention de garder ouverte la nouvelle fenêtre gnome-terminal.

    Cette partie $(echo \'"${AUX}"\') a l'intention d'imprimer des guillemets simples autour du nom du script aux. Il est important que le nom du script contienne des caractères spéciaux. Je ne pouvais pas trouver un autre moyen de le faire. Une autre façon de ne noter que les espaces consiste à utiliser: ${AUX/\ /\\ }.

  • Voici un exemple de script, qui crée un fichier journal dans lequel vous pouvez voir les messages d'erreur du processus.

3. Voici une démonstration (à partir de la version précédente ) des fonctionnalités du script:

enter image description here

3
pa4080

Vous avez un malentendu de base sur la programmation C/C++: ce ne sont pas des scripts, interprétés au moment de l'exécution. Au lieu de cela, ces programmes doivent être compilés et convertis en programmes exécutables.

En supposant que le nom de votre fichier est Cpp1.cpp, vous devrez alors exécuter le terminal suivant:

gcc -o Cpp1 Cpp1.cpp

Le résultat obtenu, Cpp1 sera un fichier binaire exécutable pouvant être exécuté à l'aide de la commande ./Cpp1 connaissances sur l'ouverture et l'utilisation des fenêtres.

1
Charles Green