GraffitiNote

PythonistaなWeb Engineerの知見

汎用ビルドスクリプト

恐らく将来的に新しい言語を習得する時に使うであろうということでメモ。

C++の勉強をしていた時、ひたすらサンプルプログラムを走らせてるうちに、
いちいちコンパイル⇢実行の手順を踏むのが面倒くさい!!!
ということで書いた、コンパイルと実行をまとめてやってくれるだけの
ビルドスクリプトです。特にすごい機能はありません。
気が向いたら機能もりもりに更新します。

仕様としては、スクリプト言語はそのまま実行、
コンパイラ言語は実行ファイル(.exe)を生成して実行、
既に生成済の xxx.exe は xxx を宣言することで実行できます。
コンパイルや実行文は赤文字で、実行結果は青文字で表示されます。
現状、CとC++pythonが動きます。
引数やpython2,3系の使い分けには対応してないです。


run.sh

#! /bin/sh

tput setaf 1 #red
if [ $# -lt 1 ]
then
    echo " "
    echo ">>./run filename"
    echo " "
    tput setaf 0 #black
    exit 1
fi

echo " "
case $1 in
    *.c)
        name=${1/\.c/}
        echo "gcc $name.c -o $name.exe"
        gcc $1 -o $name.exe
        ;;
    *.cpp)
        name=${1/\.cpp/}
        echo "g++ $name.cpp -o $name.exe"
        g++ $1 -o $name.exe
        ;;
    *.py)
        echo "python $1"
        echo " "
        tput setaf 4 #blue
        python $1
        echo " "
        tput setaf 0 #black
        exit 1
        ;;
    *.*)
        echo "not support."
        echo " "
        tput setaf 0 #black
        exit 1
        ;;
    *)
        echo "./$1.exe"
        echo " "
        tput setaf 4 #blue
        ./$1.exe
        echo " "
        tput setaf 0 #black
        exit 1
        ;;
esac
echo "$1 ===COMPILE===> $name.exe "

echo "./$name.exe"
echo " "
tput setaf 4 #blue
./$name.exe
echo " "
tput setaf 0 #black


さて、ここで実行するC++のコードを用意します。
有名なa^=b^=a^=bというエレガントなコードでswapを行うプログラムです。

swap.cpp

#include <iostream>
using namespace std;

int main(){
  int a = 1,b = 2;
  cout << "a = " << a << ", b = " << b << endl;
  a^=b^=a^=b; cout << "swapped." << endl;
  cout << "a = " << a << ", b = " << b << endl;
}


上記のコードをビルドスクリプトを使用して実行した結果が
以下のようになります。

$ ./run swap.cpp
 
g++ swap.cpp -o swap.exe
swap.cpp ===COMPILE===> swap.exe 
./swap.exe
 
a = 1, b = 2
swapped.
a = 2, b = 1


ここでは全て黒文字で表示されていますが、
実際には上から順に黒文字、赤文字、青文字で表示されます。