接続数

COUNTER194772FROM 2011/4/22

証明日誌(proof diary)

数理的手法 >> 記事詳細

2017/10/10

te.sh 2つのコンパイラでコンパイルして出力をソースのコメントとしてつけやすい形式で出力。

Tweet ThisSend to Facebook | by kaizen
#!/bin/sh
# ver 0.1 20171008 Dr. Kiyoshi Ogawa
# ver 0.2 20171008 ..
# ver 0.3 20171008 ..
# ver 0.4 20171009 ..

echo "// 9.3 sh script: ../Te.sh program_name\r"
echo "// 9.3.1 clang++ \r"
clang++ -std=c++17 -stdlib=libc++ -Wall  $1.cpp -o  $1L

./$1L 3
ret=$?
r=2
# echo $ret;
if [ $ret -eq $r ] ;then
    echo "//" $1".cpp clang++ OK!" #,$ret
else
    echo "//" $1".cpp clang++ ne " $r, $ret
fi

echo "//\r"
echo "// 9.3.2 g++ \r"
g++  -std=c++17  -Wall  $1.cpp  -o  $1G

./$1G 3
ret=$?
r=2
#echo $ret;
if [ $ret -eq $r ] ;then
    echo "//" $1".cpp g++ OK!" #,$ret
else
    echo "//" $1".cpp g++ ne " $r, $ret
fi

# 参考文献
# シェルスクリプト(bash)のif文とtestコマンド([])自分メモ
https://qiita.com/toshihirock/items/461da0f60f975f6acb10
# [ShellScript] $?をif-elifで使ったら死ぬよ!!
http://dqn.sakusakutto.jp/2013/10/shellscript_elif.html
# C言語のreturn 0の有用性が今更わかった話
https://qiita.com/nwtgck/items/32ea5dc3111a9514b12a
### end of script

今、コンパイルしているのは、下記の第1版。第二版が出ているらしい。
C++ Templates: The Complete Guide
David Josuttis, Nicolai M. Vandevoorde
Addison-Wesley Professional(2002/11/12)
値段:¥ 9,639



C++ テンプレート完全ガイド (Programmer’s SELECTION)
David Vandevoorde, Nicolai M. Josuttis
翔泳社(2010/02/11)


実際にコンパイルしたソースは、WEBに掲載されているものに、
いくつか手を加えている。適合する版が違ったり、まだ実装されていなかったりするため。一覧はこちら。
https://researchmap.jp/jo0n1csau-1797580/#_1797580

いまのところ、この本の例題で2つのコンパイラの大きな違いは

clang++(LLVM), g++(GCC) benchmark


なお、上記スクリプトでは、mainがargcを返すことを想定して、
argcの値が変わっていないことを確認するスクリプトになっています。

Q&A なぜOSおよび言語の関連する試験プログラムではmainでargcを返すか


----newer version of the script.mac
miniに最新のllvmのソースコードをコンパイル中。
LinuxとMac OS Xでコンパイル。
コンパイルは悪戦苦闘してできた。
test suiteでエラーが残っている。
まだ不安で使っていない。

Mac miniでコンパイルするときはXcodeのC++14で作業。

LLVM TEST SUITE FAIL RESULT on Linux and Mac OS X

#!/bin/sh
# ver 0.1 20171008 Dr. Kiyoshi Ogawa
# ver 0.2 20171008 ..
# ver 0.3 20171008 ..
# ver 0.4 20171009 ..
# ver 0.5 20171010 ..

echo "// 9. Error, Warnings and/or Output using sh script: ../Te.sh program_name\r"
echo "// 9.1 clang++ -std=c++14\r" 
#echo "// 9.1 clang++ -std=c++17\r" 
clang++ -std=c++14 -stdlib=libc++ -Wall  $1.cpp -o  $1L
#clang++ -std=c++17 -stdlib=libc++ -Wall  $1.cpp -o  $1L

./$1L 3
ret=$?
r=2
# echo $ret; 
if [ $ret -eq $r ] ;then 
    echo "//" $1".cpp clang++ -std=c++14 OK!" #,$ret
#    echo "//" $1".cpp clang++ -std=c++17 OK!" #,$ret
else
    echo "//" $1".cpp clang++ -std=c++14 ne " $r, $ret
#    echo "//" $1".cpp clang++ -std=c++17 ne " $r, $ret
fi

echo "//\r"
echo "// 9.2 g++ -std=c++17\r"
g++  -std=c++14  -Wall  $1.cpp  -o  $1G

./$1G 3
ret=$?
r=2
#echo $ret; 
if [ $ret -eq $r ] ;then 
    echo "//" $1".cpp g++ -std=c++17 OK!" #,$ret
else
    echo "//" $1".cpp g++ -std=c++17 ne " $r, $ret
fi

# 参考文献
# シェルスクリプト(bash)のif文とtestコマンド([])自分メモ
#  https://qiita.com/toshihirock/items/461da0f60f975f6acb10
# [ShellScript] $?をif-elifで使ったら死ぬよ!!
#  http://dqn.sakusakutto.jp/2013/10/shellscript_elif.html
# C言語のreturn 0の有用性が今更わかった話
#  https://qiita.com/nwtgck/items/32ea5dc3111a9514b12a
### end of script

08:15 | 投票する | 投票数(0) | コメント(0)