I think you are going to lose this one. Xcode stores all the project definitions in a file called Foo.xcodeproj/project.pbxproj. When one of your Mac developers changes a flag or setting, it’s recorded in the project.pbxproj file. When you change your CMakeLists.txt file, CMake triggers a rebuild of project.pbxproj, wiping out all the Mac developer’s changes. Xcode was not designed with CMake in mind, and they two work only so well together.
One possible solution (which isn’t the greatest for the Mac developers) is to use CMake to generate makefiles. They would need to write a few custom commands in Xcode which invoke CMake/Make to build the executables, but they would be able to pass arguments into CMake to control the build process. The executables would be defined separately to Xcode, and CMake would only wipe out the Makefiles. This might be a way to keep everyone happy.
The CMake folks have not given Xcode the attention it deserves, IMHO. But this limitation is inherent in Xcode’s architecture, and will be a tough nut.
Hope this helps,
-dan
Edit:
Your Xcode developers have some limited ability to use “User-Defined Settings”. I don’t know to how to use these (I’m an emacs/make-sort of guy), but perhaps they could use these to override CMake’s settings.