[CMake] Building multiple configurations with Xcode?

clinton at elemtech.com clinton at elemtech.com
Fri May 3 09:51:04 EDT 2013



----- Original Message -----
> 
> 
> ----- Original Message -----
> > clinton at elemtech.com wrote:
> > 
> > > 
> > > 
> > > ----- Original Message -----
> > >> Stephen Kelly wrote:
> > >> 
> > >> > Is it possible to build multi-config frameworks with cmake at all?
> > >> 
> > >> I also notice that the Framework unit test uses
> > >> 
> > >>  set_target_properties(foo PROPERTIES
> > >>    FRAMEWORK TRUE
> > >>    DEBUG_POSTFIX -d
> > >>  )
> > >> 
> > >> but the debug file is called 'foo', not 'foo-d'. If I use
> > >> 
> > >>  cmake --build . --target install --config Debug
> > >>  cmake --build . --target install --config Release
> > >> 
> > >> the debug and release versions overwrite each other.
> > >> 
> > >> Does this mean it has always been broken? Has no one ever tried to
> > >> create
> > >> a framework using cmake?
> > > 
> > > In the build tree, I would expect "foo" not "foo-d" for the debug
> > > framework.
> > > And in the build tree, it is possible to differentiate the release from
> > > debug simply by having two "foo.framework/foo".  One will be in the
> > > Release folder and one in the Debug folder, and a Debug build will use
> > > the
> > > one from the Debug folder, while the release build will use the one from
> > > the Release folder.
> > 
> > That indeed appears to be what happens.
> 
> But, I personally don't see a problem with there being a "foo.framework/foo"
> and a "foo-d.framework/foo-d".
> At install time, they would not overwrite each other and the export file
> would need to list both of them.
> 
> > 
> > > 
> > > For the install tree, I don't see how it is known which configurations
> > > will be installed.
> > 
> > I'm not familiar with xcode, so I assumed that if you install it would
> > install all configurations, or you would specify which you want to install.
> 
> Xcode works in one configuration at a time.
> The install target is the same way, by installing only one configuration at a
> time.
> 
> > 
> > When I use the command line I use
> > 
> >  cmake --build . --target install --config Debug
> > 
> > so it is specified.
> 
> That one configuration was specified, yes.  But it isn't known if the Release
> one will also be installed.
> If it is known they are both being installed, and one wanted them to both go
> into the same framework, then the debug one can be renamed to and the burden
> put on the user to specify DYLD_IMAGE_SUFFIX to run their application with
> the debug library.
> If only the Debug configuration is installed, and it was still renamed, you'd
> have a broken framework.
> 
> > 
> > So, I don't know what you mean here. Can you be more specific, keeping in
> > mind I don't know xcode?
> 
> The behavior is basically the same as visual studio, if you know that, with
> the addition of this framework concept.
> While the whole build system supports multiple configurations, the user is
> only in one configuration at a given time.
> In contrast, building Qt can be done with makefiles that compile multiple
> configurations at the same time, but in practice, that kind of setup seems
> rare.
> 
> > 
> > Assuming there is some unavoidable reason that the configuration is not
> > known when installing, does that mean that frameworks which contain a foo
> > and a foo_debug can not be created by cmake?
> 
> Yeah, that would seem to be the case.  Unless someone has done it and can
> tell us how.
> Again, I wouldn't mind having a foo.framework/foo and foo-d.framework/foo-d
> which avoids this whole problem.
> 

Actually, I just realized a foo-d.framework/foo-d introduces another problem.
In the code, you'd have to do a #include <foo-d/foo.h> for a debug build and
a #include <foo/foo.h> for a release build, which I wouldn't want.

Clint


More information about the CMake mailing list