My Daily Programming Life...

XCodeで別ディレクトリのライブラリへリンク

普段はWindowsしか使わないけど、今日はMacでこの前作ったPersistentQueueをビルドするためにXCodeプロジェクトを作った。
構成はこう。
PersistentQueue本体と(static library)とPersistenteQueueTest(本体のテストプログラム)の二つがプロジェクトとしてある。
それぞれにDebugとRelease版がある。
PersistenteQueueはSQLiteのライブラリをリンクする(これもDebugとRelease)がある

ひとまず、PersistentQueueというXCodeプロジェクトを作った。
そこに本体のヘッダとソースを追加して、Debug版はPersistentQueued.a , Release版はPersistentQueue.aをビルドするように設定した。
出力先は$(MYPROJ_HOME)/lib と自分で設定した環境変数を利用し設定。
Debug版はSQLited.aを、ReleaseはSQLite.aをリンクするように設定。
これでここまではうまくいった。

問題はPersistentQueueTestのほう。もともとVisualStudioで作っていたもので、そこではPersistentQueueソリューションの中に、両プロジェクトが入る形で構成されていた。
んじゃ、同じように、このPersistentQueueというXCodeプロジェクトに両方入れられるんじゃないかと言うことで、やってみた。

XCodeプロジェクトにはターゲットという物がある。これがビルドプロセスの一つの単位になっているっぽい。PersistentQueueライブラリ用にひとつ、PersistentQueueTestプログラム用に一つのターゲットをつくればよさそう。ということで作った。問題ない。

さて、このPersistentQueueTestは、先ほど出力したPersistentQueue.a ( $(MYPROJ_HOME)/lib内 )をリンクしたい。もちろんデバッグ版とリリース版分けて。

どうやったらいいのだろうかと思って、プロジェクト設定やターゲット設定をいじってみたが、これがうまくいかない。
いちばんそれっぽい方法として、PersistentQueueターゲットの出力であるPersistentQueue.aがプロジェクト管理ウィンドウの「Products」フォルダに表示されていたので、それをドラッグして、リンクプロセスに入れてみた。一応自動的にデバッグ版とリリース版でリンクするライブラリ名が変わるようになった。

でもさらに問題。なぜかリンクプロセスが失敗する。PersistentQueuTestがそのライブラリを自分のビルドプロダクト出力フォルダから探そうとする。なぜだ・・・。ライブラリ検索パスとかしていしたし、そもそもさっきドラッグしてリンクプロセスに追加したライブラリはは$(MYPROJ_HOME)/libにあって、その情報を見てもそうかかれているのに・・・。

色々調べたら、ターゲット設定の「構成別のビルドプロダクトパス」みたいなやつの中を探すらしい。これがPersistentQueueとPersistentQueueTestでまったく異なるフォルダを示しているとうまくいかない。
でも、やりたいことはまさに、この異なるフォルダにそれぞれの生成物を出力したいのですが・・・。

どうすりゃいいんでしょうか。

まあ、まだ今日が初日だし、いろいろ試してみよう

0 コメント:

Post a Comment

feedSubscribe to my feed