小松です。

In the message of [ruby-dev:8714] Re: [win] dir name
    on 1999/12/24 14:14:04 Koji Oda <oda / bsd1.qnes.nec.co.jp> wrote:
|マニュアルによると.cpp と .cxx はC++ ソースと見なされます。
|コンパイルオプションによって、明示的に指定することもできます。
|(/Tc,/Tp,/TC,/TPオプション)
|# .cxx で失敗した記憶があるんですが...

今は大丈夫みたい。VC6.0 + SP3です。

==============================================================
C:\lang\ruby>type t.cxx
#include <stdio.h>

int main()
{
#if defined __cplusplus
    printf("__cplusplus is defined\n");
#else
    printf("__cplusplus is not defined\n");
#endif
    return 0;
}

C:\lang\ruby>cl -nologo t.cxx
t.cxx

C:\lang\ruby>t
__cplusplus is defined

C:\lang\ruby>cl -nologo -TC t.cxx
t.cxx

C:\lang\ruby>t
__cplusplus is not defined

C:\lang\ruby>
==============================================================

ところで.cppを使った場合、create_makefile()で生成されたMakefile
ではフラグがコンパイラにわたりません。

==============================================================
C:\lang\ruby\x>type extconf.rb
require 'mkmf'
create_makefile("x")

C:\lang\ruby\x>type x.cpp
extern "C" {
#include "ruby.h"
}
void Init_x() {}

C:\lang\ruby\x>ruby extconf.rb
creating Makefile

C:\lang\ruby\x>nmake -nologo
        cl  /c x.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

x.cpp
x.cpp(2) : fatal error C1083: インクルード ファイルがオープンできません。'ruby.h': No such file or directory
NMAKE : fatal error U1077: 'cl' : リターン コード '0x2'
Stop.

C:\lang\ruby\x>
==============================================================

生成されたMakefileに
    CPPFLAGS = $(CFLAGS)
とか足してやれば通ります……が、CPPFLAGSは一般的にはプリプロセッサの
cpp用のフラグな気が。

nmakeは.cxxに対してはCXXFLAGSを使い.cppに対してはCPPFLAGSを使うという
ルールになっているので、.cxxを使用した場合は、
    CXXFLAGS = $(CFLAGS)
があるので動きます。

lib/mkmf.rbでmswin32ならCPPFLAGSを足すとかにした方がよいかも。

あと、SunOSとかSolarisのmakeでは、フラグはCCFLAGS (拡張子はcc)
なんですよね。これも対応したほうがいいのかなあ?

それから、C++FLAGSをつかっているのをみたことがあるんですが、
どこだったっけ?

--
小松克行 / Katsuyuki Komatsu <komatsu / sarion.co.jp>