日曜日, 8月 27, 2006

Cygwinのgccが実行ファイルに .exe を付ける

CygwinでC言語のプログラムをコンパイルすると、
知らないあいだに実行ファイルの名前に拡張子 .exe が付いている。

たとえば hello.c というファイルをコンパイルして実行ファイル hello を作りたいから

gcc -o hello hello.c

とすると、できるのは hello ではなくて hello.exe なんです‥。

別にいいけど。

‥と思ってたけど。困ることもある。

makefileでcleanの処理書くとき困る。
例えばこんなmakefile。

default: hello

clean:
rm -f hello

hello: hello.c
gcc -o hello hello.c

Linuxなら完璧に動くけど、
Cygwinだと make したときに hello.exe が作られるけど、
make clean しても hello.exe が消えない。

困ったねえ。
でも考えるの面倒だから、rm のあたりに追加しちゃえ。

clean:
rm -f hello hello.exe

これでLinuxでもCygwinでも動くでしょ。

でも、これでいいの? ほんとにこんなやりかたでいいの?!
何か気持ち悪い‥。

Cygwinのgccが変なことするからといって、
GNU Makeにしわよせするなんて。
かといって、こんなことのために環境を判断して分岐するのも‥むぅ。

ところで、.exe は必要なものなのかどうか。
試しに

mv hello.exe hello
./hello

としてみよぅ。ちゃんと動くから‥。
なんでCygwinのgccは .exe 付けるんだろうねえ。まぎらわしい。

といっても、Cygwinのシェルじゃなくて、Explorerから直接ダブルクリックしたら
.exe 付いてないと実行しないんだろうなぁ。その利便のためか‥。

なんかごちゃごちゃしてる。
gccはCygwinのシェル上で使うのに
生成されるものだけExplorerを意識するなんて‥。
にゃ、もしやCygwinのシェルではなく
コマンドプロンプトから呼び出すことを考えてる?

こういうのはたいてい、何かの歴史的事情なんでしょぅ。

忘れたい、忘れたい、忘れたい‥。
でもときどき遭遇する。逃げ切れない。

0 件のコメント: