Como executar o programa C / C ++ usando o menu de contexto (opção de clique direito)

1

Eu quero aprender C / C ++. Aqui meu requisito não é usar qualquer IDE. Eu quero executar meu programa C / C ++ da seguinte maneira,

  1. Eu escreverei "Cpp1.cpp" // que irá imprimir "Hello World".
  2. Salve o arquivo e feche.
  3. Clique com o botão direito no arquivo "Cpp1.cpp".
  4. Nas opções de menu do botão direito, eu deveria ter um botão como "Executar C ++".

Depois de seguir os 4 passos acima, a saída ou os erros devem aparecer na janela do terminal.

Eu tentei usar o script do Nautilus, mas falhou miseravelmente depois de várias tentativas.

Por favor, veja a imagem (que não está funcionando da maneira que eu estou esperando).

Eu estou tentando fazer como abaixo, verifique aqui

    
por Ravi Teja 08.10.2017 / 14:31

2 respostas

3

1. Crie o arquivo do script do Nautilus e torne-o executável:

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

2. Aqui está o conteúdo do script. Ele cria um script auxiliar (auto-apagado), que é executado em um novo terminal gnome, assim você pode ver as mensagens de erro dentro da janela do 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' "" "${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
  • Explicações adicionais : O uso de um script auxiliar é a maneira mais robusta de executar mais de um comando dentro de um novo terminal-gnome, que encontrei enquanto fazia uma das minhas respostas .

    Dependendo dos parâmetros de entrada da função compile_and_exec_program , o conteúdo gerado pela seção printf , script auxiliar, será semelhante como:

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

    Onde && significa (como de costume) se o comando que está no lado esquerdo for executado com sucesso, então execute o comando que está no lado direito. A linha rm -f /work/dir/project.bash removerá o próprio script auxiliar. A última linha exec bash pretende mantenha aberta a nova janela do terminal gnome.

    Esta parte $(echo \'"${AUX}"\') pretende imprimir marcas de aspas simples em torno do nome do script auxiliar. É importante quando o nome do script contém alguns caracteres especiais. Eu não encontrei outra maneira de fazer isso. Outra forma de colocar apenas os espaços é usando: ${AUX/\ /\ } .

  • Aqui está um script de exemplo, que cria um arquivo de log, onde você pode ver as mensagens de erro de o processo.

3. Aqui está uma demonstração (da versão anterior ) dos recursos do script :

    
por pa4080 08.10.2017 / 18:24
1

Você tem um mal-entendido básico sobre a programação C / C ++: Estes não são scripts, interpretados em tempo de execução. Em vez disso, esses programas precisam ser compilados e convertidos em programas executáveis.

Supondo que o nome do seu arquivo seja Cpp1.cpp , você precisará executar o seguinte terminal:

gcc -o Cpp1 Cpp1.cpp

A saída resultante, Cpp1 , será um arquivo binário executável que pode ser executado usando o comando ./Cpp1 Observe que, neste caso, este programa não pode ser executado clicando com o botão direito do mouse sobre ele: ele não tem nenhum conhecimento sobre como abrir janelas e usá-las.

    
por Charles Green 08.10.2017 / 15:31