2012-08-02 12 views
5

私はWindows XP上で動作するように設計されたVisual Studio 2008を使用して構築された非常に大きなアプリケーションを持っています。このコードは、6つの別々のプロジェクトを含む1つのソリューションファイルで構成されています。私の仕事は、Linux上で動作するようにこのアプリケーションを移植することです。私は前にこのようなことはしていません。Solution-WideはVisual Studioで定義していますか?

昨日、私の会社はこのコードをWindowsでコンパイルしたいと思っています。私はこれらのようなプリプロセッサのブロックを使用して、ヘッダーに含めるファイルをコンパイラに伝えることができ、その後

#define COMPILE_FOR_LINUX 

#ifdef COMPILE_FOR_LINUX 
// include required Linux headers here and skip Windows header includes 
#else 
// include required Windows headers here and skip Linux header includes 
#endif 

した後、これを達成するための私の最初のアイデアは、次のようなプリプロセッサ文を使用することですCに誰かのためにできるだけ簡単にするために

#ifdef COMPILE_FOR_LINUX 
// compile Linux specific code used here. 
#else 
// compile Windows specific code used here. 
#endif 

:適切なファイルを含めて、私はこれらのようなブロックを持つすべてのプラットフォーム依存のコードをカプセル化することができ彼らの好みのプラットフォームのためにアプリケーションをコンパイルして、私はCOMPILE_FOR_LINUXを1つの場所に指定したいと思っています。しかし、私はこれを達成する方法がわかりません。

私は空のヘッダーファイルを作成し、Visual Studioソリューションファイルのインクルードパスで指定されているこのヘッダーファイルをソリューション内のすべてのファイルに含めるようにしました。 Linuxの場合、COMPILE_FOR_LINUXを定義する別のバージョンのヘッダーファイルを作成し、空のファイルではなくこのファイルをmakefileに指定します。しかし、私はこれが非常に粗末な解決策であると確信しています。

誰かが、グローバルに何かを定義したり、ソリューション内のすべてのファイルがそれを見ることができるような方法で変数を作成したりするより洗練された方法を提案できますか?

+0

他の人がこれを探している場合に備えて:http://stackoverflow.com/questions/5268177/is-there-anyway-to-define-constant-on-a-solution-basis –

答えて

3

それはあなたが使用しているコンパイラに依存しますが、あなたは自分のメイクファイルでCOMPILE_FOR_LINUXを追加する必要がありますので、gccのためにあなたは、コマンドラインからプリプロセッサディレクティブを指定することができます。 Windows用の

g++ -DCOMPILE_FOR_LINUX ..... 

MSVSを使用している場合、あなたはプロジェクトのプロパティでPreprocessor directivesタブを変更することができます(実際には、COMPILE_FOR_LINUXが定義されていないので、あなたは、する必要はありませんが、あなたは一貫性のためCOMPILE_FOR_WINDOWSを追加することができます) 。

+0

これは有望です。ありがとう! –

+0

-DCOMPILE_FOR_LINUXにする必要はありませんか? – mort

+0

@mort私は知らない、しばらくの間gccで作業していない。それは...ですか? –