2009-10-25 38 views
13

私はVS2008でWin32 DLLプロジェクトを持っています。これは、Cモジュールのほんの一部で書かれています。
VS2008に依存せずにVS2008をビルドできるようにしたいので、すべてのビルドとリンク手順を行うカスタムメイクファイルを作成しました。これはすべてうまくセットアップされています。Visual Studioで単一のプロジェクトにC++とCを混在させることはできますか?

今、このDLLにいくつかのC++モジュールを追加したいと思います。 カスタムmakefileを変更して、.cppモジュールをC++として、.cモジュールを通常のC(/ Tc)としてコンパイルしました。これはすべて動作します。すべてを結びつけ、問題はありません。

同じようにVS2008プロジェクトを構成できますか?

同じVS2008プロジェクトでC++とCを混在させることはできますか?

またはカスタムビルドステップが必要ですか?

ありがとうございました。


ANSWER

私は「デフォルト」としてコンパイルするためにそれを変更するのに必要なCとしてコンパイルするように設定VS2008のプロジェクトを持っていました。右...その後、プロジェクトをクリックし、[プロパティ]を選択し、:

alt text http://i33.tinypic.com/qqsd8g.jpg

おかげで、パベルを。

+0

ソリューションエクスプローラで[プロパティ] - > [Cコードとしてコンパイル]をクリックするだけです。そして、その仕事:P – user956584

答えて

8

まず、/Tcをビルドする必要はありません.cl.exeはファイル拡張子を使ってタイプを決定します。したがって、.cファイルはデフォルトでCとしてコンパイルされ、.cppとC++としての.cxxファイル

VSプロジェクトの場合、この動作を無効にすることはできません(または少なくとも私は方法がわかりません)。

+1

非常に役に立ちます。 VSには、/ Tc、/ Tp、または "default"のいずれかの "Compile As"オプションを設定するオプションがあります。私は/ Tcに設定しました。私はそれを "デフォルト"にリセットする必要がありました。いいよ。 – Cheeso

1

Microsoft Cコンパイラが両方をコンパイルすることを考慮すれば、それらはうまく追加する必要があります。プロジェクトに追加すると、clに渡されます。clは、ファイルの拡張子に基づいてどのモードを使用するかを選択します。 .cppを使用しています。

要約:はい。

GCCでもこれを行うため、makefileは移植性があるはずです。

+1

'gcc'でC++をコンパイルする場合、' gcc'はリンク段階で必要なライブラリを追加しないかもしれないことに注意してください。 C++プログラムのリンクステップは、常にgccではなく 'g ++'を使用する必要があります。 – bdonlan

5

同じプロジェクトでCとC++を混在させることは全く問題ありません。 C関数とCデータ構造のCとC++モジュールの間のインターフェイスを設計するには、それを行う必要があります。次に、これらのインターフェイス関数がC-リンケージ指定子extern "C"でC++側で宣言されていることを確認してください。

関連する問題