2010-11-23 11 views
3

複数のオブジェクトを持つ1つのソース 私はMSVS 2010を使用していますが、2つのオブジェクトファイルにコンパイルする必要のあるC++ソースファイルがあります。 これらのコンパイル間の違いは、一方のコンパイルでは "#UNICODE"ですが、他方ではコンパイルできません。 私はこのためにテンプレートを使用することはできません。複数のオブジェクトを持つ1つのソース

現在、私は自分のプロジェクトで3つのソースファイルを使用しています。 実際のソースはビルドから除外され、残りの2つはその周りのラッパーです。このよう :

ファイル=ラップUNICODE.cpp

#ifndef UNICODE 
#define UNICODE 
#endif 

#include "actual-source.cpp" 
// eof 

ファイル=ラップANSI.cpp

#ifdef UNICODE 
#undef UNICODE 
#endif 

#include "actual-source.cpp" 
// eof 

使用して、私は簡単にラッパーsoucrcesの使用を避けることができるmakefileを使用して異なる出力 スイッチ。 私の質問は、MSVSプロジェクトでこれを直接行うことができるかどうかを知りたいと思います。

+1

これはどのように動作するはずですか? UNICODEまたは!UNICODEの異なる名前を定義していない限り、どのプラットフォームでもリンカの問題に終わるように思えます。実際のsource.cppには何が入っていますか?私たちはヒントを得ることができますか? –

+0

あなたの質問に 'visual-studio'とタグを付けてください。 –

+0

2組の宣言のために動作します。 –

答えて

1

あなたがしたいことを正しく理解していれば、これが可能です。 私はMS Visual Studio 2005 Standard Editionを持っています。ここで私はこれを行うことができます(あなたは異なるバージョンを持っている場合、これを調整する必要があるかもしれませんし、バージョンによっては動作しないかもしれません;あなたのコンピュータが爆発しないことを願っています:))。

最初の手順では、プロジェクトファイルを手動で編集する必要があります。プロジェクトファイルを開きます(それは私のマシン上でstuff.vcprojと呼ばれている)と、あなたのファイルに言及行複製:MSVSにプロジェクトをロードし、その後

<File 
    RelativePath=".\actual-source.cpp" 
    > 
</File> 
<File 
    RelativePath=".\actual-source.cpp" 
    > 
</File> 

を。ソリューションエクスプローラ(Ctrl + Alt + L)をクリックします。同じ名前の2つのファイルがプロジェクトに表示されます。それぞれのプロパティページ(自分のマシン上のAlt + F7)を開き、必要な相違点を追加します(たとえば、プリプロセッサ定義)。

また、同じウィンドウ(プロパティページ)で出力ファイル、オブジェクトファイル名を選択し、別の名前を追加する必要があります(actual-source-unicode; MSVSはコンパイル時に.obj拡張子を追加します)。そうしないと、2つのobjファイルの名前は同じになり、もう一方のファイルは上書きされます。

+0

正しいことのように聞こえる!簡単にする必要がありますが、それが動作する場合は動作します。少なくともあなたは私の質問を完全に理解していました。どうもありがとう !! –

+0

@Edwin:これにコメントを書き込む方がよいでしょう。 MSVCはIDE(AFAICT)にその存在を表示しないため、ファイルごとのプロパティはメンテナンスコーダーのために混乱します。誰かが重複したファイルエントリに出くわして、(認識された)重複を削除することにします。 – DevSolar

+0

@DevSolar:あなたはこのことが混乱する可能性があることは間違いありません。しかし、ソースは(自分自身のために)文書化されており、個人的なプロジェクトです。そして、彼が賢明だと思って他の人に相談せずに何かを削除することを決めた人は、視界に入れなければならない(冗談)。 –

0

AFAIKでは、ソリューションに複数のビルドを作成できます。ソリューションの構成マネージャーに入るだけです(ソリューションのコンテキストメニューからアクセス可能である必要があります)。

このようにして、ファイルの2つのバージョンを持つことも回避できます。 2つの構成で定義オプションを異なるように設定すれば十分です。

+0

これは私がしたいことではありません。私はUNICODEの方法で1回、ANSIの方法で1回、同じアプリケーションを実行してから、違いを比較する必要があります。 –

0

ユニコードアプリケーションをビルドする場合、Visual Studioは_UNICODEを定義します。

+0

私はそれを知っています。私はすでにそれを使用しています!私はUNICODEとANSIを同じ時間にしたいです –

0

2つのビルド(Luca Martiniの言及のように)で異なる構成を使用し、次にバッチビルドを使用するのはなぜですか?コンパイルされた出力を任意の方法で比較することができます。

+0

私はコンパイルの出力を比較したくありません。 –

+0

プログラム上の問題ではありません。私はちょうど2つのbuidを使用せずにラッパーソースを取り除きたいと思っています。 makeファイルを使用すると、出力ファイルとシンボルの定義を変更する2つのbuild節を持つことによって、1つのソースコードから2つのオブジェクトファイルを作成します。 –

関連する問題