web-dev-qa-db-ja.com

コンテキストメニューを使用してC / C ++プログラムを実行する方法(右クリックオプション)

C/C++を学びたいです。ここで、私の要件はIDEを使用しないことです。次の方法でC/C++プログラムを実行したいのですが、

  1. 「Cpp1.cpp」//「Hello World」と表示されます。
  2. ファイルを保存して閉じます。
  3. 「Cpp1.cpp」ファイルを右クリックします。
  4. 右クリックメニューオプションには、「Run C++」というボタンがあります。

上記の4つの手順に従うと、ターミナルウィンドウに出力またはエラーが表示されます。

Nautilusスクリプトを使用して実行しようとしましたが、複数回試行した後、惨めに失敗しました。

スクリーンショットを参照してください(期待どおりに機能していません)。

Reference image

私は以下のようにしようとしています、 ここをチェックしてください

1
Ravi Teja

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-terminal内で複数のコマンドを実行する最も堅牢な方法です。 私の答えの1つ

    関数_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_は、 keep open を新しいgnome-terminalウィンドウにしようとしています。

    この部分$(echo \'"${AUX}"\')は、auxスクリプトの名前を一重引用符で囲むことを意図しています。スクリプト名に特殊文字が含まれている場合は重要です。他の方法を見つけることができませんでした。スペースのみを引用する別の方法は、_${AUX/\ /\\ }_を使用することです。

  • こちらです ログファイルを作成するサンプルスクリプト。プロセスからのエラーメッセージを確認できます。

3。次に、スクリプトの機能のデモ( 以前のバージョン から)を示します。

enter image description here

3
pa4080

C/C++プログラミングについての基本的な誤解があります。これらはスクリプトではなく、実行時に解釈されます。代わりに、これらのプログラムをコンパイルして実行可能なプログラムに変換する必要があります。

ファイルの名前がCpp1.cppであると仮定すると、次のターミナルを実行する必要があります。

gcc -o Cpp1 Cpp1.cpp

結果の出力Cpp1は、コマンド./Cpp1を使用して実行できる実行可能バイナリファイルになります。この場合、このプログラムは右クリックしても実行できません。ウィンドウを開いて使用する方法に関する知識。

1
Charles Green