第5回 既存ソフトとの切り分け

このページをDeliciousに追加 このページをはてなブックマークに追加 このページをYahoo!ブックマークに追加

2001年12月14日(金)版

第5回 既存ソフトとの切り分け

"ソフコン2002 3rd Edition featuring l'agenda" - l'agendaでソフトを作ろう!

←第4回へ↑↑コンテストTOPへ↑↑→第6回へ

■既存ソフトとの切り分け

 さて、l'agenda対応ソフトを作ろうとしているわけだが、その際にはソースに修正が必要となる。しかし、l'agendaだけにしか対応しないソフトは少ないだろう。既存ソフトをl'agendaに移植するケースも多いのではないかと思う。そのため、l'agendaで動作するときと、それ以外のCEマシン用のソースコードを切り分ける必要が出てくる。
 この処理の切り分けはl'agendaに限らず今までも必要になってきた。例えば、PocketPC専用の処理を行う、などである。その場合には以下のように行ってきた。


#if defined(_WIN32_WCE_PSPC) && (_WIN32_WCE >= 212)
//PocketPC用のソース
#else
//非PocketPC用のソース
#endif

このように #if 等プリプロセッサを使って、処理を切り分けてきた。では、BE500の場合、どのようなプリプロセッサを使えばいいのであろうか?
実を言うと、BE500を特定できるようなプリプロセッサは用意されていないのである。これは困った。何か対処方法はないだろうか?

■構成で切り分ける

ここで私が行っている方法を紹介したい。それはBE500専用の構成を作成し、その構成でプリプロセッサを自分で指定する、というものである。その構成ではBE500用のSDKでしかコンパイルしないことにする。それ以外の構成ではBE500用以外のSDKでコンパイルすることにする。

まず、[ビルド]-[構成]でBE500用の構成を追加する。構成名はとりあえず、BE500Rel とでもしよう。CPUはMIPS、設定のコピーではMIPSのものをコピーする。


新しい構成ができあがったら、早速、アクティブな構成に新しい構成を指定し、設定を変更する。[プロジェクト]-[設定]の「C/C++」タブで「プリプロセッサの定義」というところの最後にBE500特有を表すプリプロセッサを自分で(適当に)決めて指定する。例えば、LAGENDA_BE500 などだ。

そして、以下のようにすればよい。


#ifdef LAGENDA_BE500
//l'agenda用のソース
#else
//非l'agenda用のソース
#endif

あとは、l'agenda用の構成では、l'agenda用のSDKでのみビルドするように注意するだけである。
このようにすることで、l'agendaとその他のCE用のソースコードを切り分けることが可能となる。

なお、もしMFCを使用する場合、このl'agenda用構成では、「共有DLLでMFCを使用する」にしておく。そうしないとリンクエラーが出る場合がある。MFC用のDLLはl'agendaに最初から内蔵されているので、スタティックリンクする必要性はない。

■今後のサンプルコードについて

 今後の連載でl'agenda特有の機能を次々と使っていくことになる。そのサンプルコードでは簡潔にするためl'agendaでしか動かないような記述をしていくが、実際には(他CEマシンでの動作も考慮に入れる場合には)今回のような方法で既存ソフトとソースを切り分けていくことになる。



第5回 既存ソフトとの切り分け

Reported by 古原伸介


Last-modified: Sun, 24 May 2009 23:45:30 JST (3654d)