2017年10月10日火曜日

【誰得】CPad for Borland C++CompilerでGCCを使う【スーパー手抜き】

出来がひどすぎるので自分専用

※2018/04/14追記※
初版から1年以上放置してたがコンパイルオプション渡せるように改良(?)

※2018/04/16追記※
gcc7.3だと上書きできずにpermission deniedしたので古い奴を問答無用で削除するようにした





<なんでこんな事したの>
CPad(ryでOpenMPが使いたかっただけ()

高専時代から使ってるので環境変えたくなかったのよね…





<フロントエンドは使いまわすもの>
①GCCとMSYS2を入手する
MinGWMinGW-w64MSYS2のインストーラを落としてきてインスコする。
gccの実行ファイル等々とmsysの/usr/binにパスを通す(環境依存)

②CPad(ryを入手する
なんか本家から落とせないらしい
2018年現在で17年前のソフトだもんね…

③↓をコンパイル
/*
//////////////////////////////////////////////////////////////
CPad for Borland C++ Compilerでgccを呼ぶ何か
2017/03/28 柏木てるみ
//////////////////////////////////////////////////////////////
gccとmsysの/usr/binにパスが通ってる事前提で書いてます
一応C++の.cppもいけるはず(未確認)
2017/03/28
mod.0…自分専用だったのでgccのオプションはキメ打ち(手抜き)
2018/04/14
mod.1…CPad(ryのコンパイル時オプションをgccに渡せるようにした(今更)
2018/04/16
mod.2…gcc7.3.0で実行ファイルの上書きができずmsysのrmで強引に削除するようにした(のうすじ)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int i=1,n=1;
char ext[]=".",input[512],output[512],option[512]={0},strip[512],rem[512];
for(;;n++)
{
if(argv[n]==NULL) break;
}
sprintf(input,"%s",argv[n-1]);
for(;;i++)
{
sprintf(option,"%s %s",option,argv[i]);
if(i==n-2) break;
}
sprintf(output,"gcc \"%s\" -o \"%s.exe\"%s",input,strtok(argv[n-1],ext),option);
sprintf(strip,"strip \"%s.exe\"",argv[n-1]);
sprintf(rem,"rm \"%s.exe\"",argv[n-1]);
system(rem);
system(output);
//system(strip); //常時strip使う場合はコメントアウト解除
return 0;
}
view raw CPad-for-gcc.c hosted with ❤ by GitHub
普通にCPad(ryでmakeすれば動くはず…Borland C++Compiler落とせない人は①でインスコしたGCCを使ってにぇ!
実行ファイル→自己責任でどうぞ(64bit専用)
MinGW-w64使ってるせいか-m32するとエラーがひどい

④CPad(ryの設定
「実行」→「設定」→「コンパイラのパス」に③で作った(落とした)実行ファイルを指定する

bcc32.exeじゃありません、とかなんとかエラー出ても無視。

「実行」→「設定」→「実行」→「コンパイル時のパラメータ(C)」にGCCのコンパイルオプションを記述する

私はよくわからないので-Wall -lstdc++ -fopenmp -O3 -ftree-vectorizer-verbose=2 -march=nativeだけ記述してます(-mtune=nativeって効くの?)
なお-Wall有効だとBCCで通る程度のエラーでも蹴られます。

⑤普通にmake&実行
gcc7.3に管理者権限付与しても上書きできないばかりか標準出力が虚空に消えてCPad側に表示されない()
上書きできねぇなら消してしまえ!とrmで削除するようにしました(危険)
このためだけにmsysが必要ですがremove()でもsystem()からdel呼んでもerrno=13だったんだもん…
ファイルが上書きできない場合は③で作った実行ファイルに管理者権限を付与する。
ファイルを右クリック→「プロパティ(R)」→「互換性」→「管理者としてこのプログラムを実行する」のチェックボックスをON


⑥動かないんだけど?
gccとrmとstripにパスが通ってても動かない場合は諦めよう。

0 件のコメント:

コメントを投稿