From: Katsuyuki Komatsu Date: 1999-12-29T12:56:38+09:00 Subject: [ruby-dev:8760] Re: [win] dir name 小松です。 In the message of [ruby-dev:8714] Re: [win] dir name on 1999/12/24 14:14:04 Koji Oda wrote: |マニュアルによると.cpp と .cxx はC++ ソースと見なされます。 |コンパイルオプションによって、明示的に指定することもできます。 |(/Tc,/Tp,/TC,/TPオプション) |# .cxx で失敗した記憶があるんですが... 今は大丈夫みたい。VC6.0 + SP3です。 ============================================================== C:\lang\ruby>type t.cxx #include 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