I asked this a few weeks back but never
got an answer. To rephrase it:
How do I build a Debug and Release version
of a dynamic library, and have my app’s Debug and Release configurations
link against the proper version.
When I try adding the dynamic lib from the sub-project disclosure (like static
libraries) it seems to disregard the source and generate a path to the app
build destination.
My current work around is to just always link
both the Release and Debug app against the Release version of the dynamic lib
by dragging the actual build target from the file system into the app’s
Frameworks and External Libraries area.
It happens that there are no extra
interfaces exported in the Debug dynamic lib so I can get away with this, but
it isn’t the preferred solution for a number of reasons the foremost
being that the Debug won’t cause the Release dynamic lib to be built
(just the debug) so building takes almost twice as long and can’t be a
one step process.
David Litwin
This works well for static
libraries (why isn’t it in the user’s guide?) but not for dynamic
libs. When I do this with my dynamic libs it issues a fullpath on the
link line, and the path it gives the dynamic lib is that of my build product,
not the path where the lib is built.
David Litwin
Chris Espinosa writes:
The best way to do this is to use a shared build
folder between the project that builds the static library and the project that
builds its clients. Both projects should have Debug and Release configurations
(the names are arbitrary, but should be the same in each project).
When you
build the static library's Debug configuration, it will build into
$(SYMROOT)/Debug/mylib.a, and when you build Release, it will build into $(SYMROOT)/Release/mylib.a.
Note that the library names are the same but they're in per-configuration
directories, much like CodeWarior puts per-target intermediates into per-target
directories.
Then drag
the static library project and drop it into your app project. When you disclose
it, it will show that it builds foo.a. Drag that into the Link Binaries with
Libraries build phase of your target.
Then when
you build the Debug configuration of your app, it will use the Debug build
folder, and automatically pick up the Debug static library, and the same for
the Release configuration.
If you
really want the files in the same place and named differently, then you have to
use separate targets for your Debug and Release versions of your app (and probably
use just one configuration). Add the mylib_d.a static library to the Debug
target and the mylib.a static library to the Release target, just like in
CodeWarrior.
Chris