6

Windows XP で実行するように設計された Visual Studio 2008 を使用して構築された非常に大きなアプリケーションがあります。このコードは、6 つの個別のプロジェクトを含む 1 つのソリューション ファイルで構成されています。私の仕事は、このアプリケーションを Linux で実行できるように移植することです。私は以前にこのようなことをしたことがありません。

昨日、私の会社は、このコードを使い終わったら 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

適切なファイルを含めた後、プラットフォームに依存するすべてのコードを次のようなブロックでカプセル化できます。

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

誰かが好みのプラットフォーム用にアプリケーションをコンパイルするのをできるだけ簡単にするために、COMPILE_FOR_LINUX を 1 か所だけに指定したいと思います。ただし、これを達成する方法がわかりません。

私が持っていた 1 つのアイデアは、空のヘッダー ファイルを作成し、Visual Studio ソリューション ファイルのインクルード パスで指定されているように、ソリューション内のすべてのファイルにこのヘッダー ファイルを含めることでした。Linux の場合、COMPILE_FOR_LINUX を定義する別のバージョンのヘッダー ファイルを作成し、makefile が空のバージョンではなくこのバージョンを指すようにします。ただし、これは非常に大雑把な解決策であり、うまくいくかどうかはわかりません。

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

4

1 に答える 1

2

使用しているコンパイラによって異なりますがgcc、コマンドラインからプリプロセッサディレクティブを指定できるためCOMPILE_FOR_LINUX、makefileを追加するだけで済みます。

g++ -DCOMPILE_FOR_LINUX .....

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

于 2012-08-02T18:09:19.310 に答える