views:

489

answers:

2

Hi all,

I'm creating a static lib on Mac OS X for one of our customers, as well as a small cmd line app to test the static lib. The cmd line project has 2 extra library search paths, which meant I was linking to the Debug version in Release mode and just about went crazy, so I tried to get rid of these two paths, but I couldnt find where they were specified. I was looking in the project info, but it turns out they were specified in the target info.

I dont understand the distinction?! Why there are 2 sets of settings, which are essentially the same?! Can someone please enlighten me? Thanks in advance.

A

+2  A: 

A project can contain multiple targets. For example, an app I write has four - the app itself, a Quick Look plugin, a framework and a bundle that contains Mac OS 10.6-specific functionality that can be dynamically loaded in.

Project settings apply to every single target in the project. Each target can then override individual settings if they need to - for instance, my project's Target SDK is set to 10.5, but the 10.6-specific bundle has it's Target SDK set to 10.6.

In some instances, some settings don't make sense to be in Project Settings - one of these, I guess, is search paths.

iKenndac
Corollary question: How am I supposed to include the static library to the cmd line app project? By drag-n-dropping into the list of source files? Or from the build settings?
vectorizor
+1  A: 

You often have multiple targets in a single project - for instance, you might have a framework project with a target for building as a dynamic .framework bundle, and a target for building a static lib. Or your app might have a target for building the app itself, and a target for building some helper command-line tool that it needs to install.

Wherever possible, I'd suggest changing settings at the highest level (in the project settings, and simultaneously changing debug & release configurations), and only customizing the target settings when necessary. Even better, move as many settings as possible into xcconfig files, which seem a much more explicit way of specifying your build setup.

jdelStrother