[CMake] XCode Generation Issue

David Morsberger dave at morsberger.com
Wed Jan 20 07:21:16 EST 2016


> On Jan 19, 2016, at 10:11 PM, Eric Wing <ewmailing at gmail.com> wrote:
> 
> On 1/19/16, David Morsberger <dave at morsberger.com> wrote:
>> Any help would be appreciated.
>> 
>> In particular I’d like to know how the default compiler arguments are set
>> when ‘cmake -G Xcode’ is executed. The attached file contains the cmake test
>> compile extracted and reformatted from CMakeOutput.log that should have
>> failed. Again, what is setting all the clang compiler options when this is
>> executed?
>> 
>> 
>> 
>> All help is appreciated
>> 
>>> On Jan 18, 2016, at 2:58 PM, David Morsberger <dave at morsberger.com>
>>> wrote:
>>> 
>>> I’m having an issue generating and using a XCode project using cmake -G.
>>> 
>>> cmake —version
>>>    cmake version 3.4.1
>>> 
>>> Xcode Version 7.2 (7C68)
>>> 
>>> Mac OS 10.11.
>>> 
>>> 
>>> My CMakeLists.txt has a clang option that fails during the -G Xcode pass
>>> but fails when linking within XCode.
>>> 
>>> The compiler / linker option is ‘-Wl,—as-needed’
>>> 
>>> The test compile/link step in ‘cmake -G Xcode' creates a long clang
>>> command with arguments ‘-Wl,—as-needed’ plus ‘—serialize-diagnostics <path
>>> to .dia file>’
>>> 
>>> The link step within Xcode after the project created has the
>>> ‘-Wl,—as-needed’ argument and does not have the ‘—serialize-diagnostics
>>> <path to .dia file>’ argument. The link fails because ‘-Wl,—as-needed’
>>> isn’t supported.
>>> 
>>> If copy and execute the long clang command from the ‘cmake -G Xcode’
>>> command and remove the ‘—serialize-diagnostics <path to .dia file>’ then
>>> it successfully fails with ‘-Wl, —as-needed’ isn’t supported.
>>> 
>>> Finally, when I use cmake to generate unix makefiles it works meaning
>>> cmake determines ‘-Wl—as-needed’ isn’t supported and doesn’t add it to the
>>> argument list.
>>> 
>>> Questions:
>>> - Where is the ‘—serialized-diagnostics’ argument coming from when
>>> executing ‘cmake -G Xcode’?
>>> 
>>> - What is a .dia file and how do I read it?
>>> 
>>> - What’s the preferred / recommended way of detecting the non-supported
>>> ‘-Wl,—as-needed’ argument during the ‘cmake -G Xcode’ phase? One option
>>> might to be to remove the ‘—serialize-diagnostics’ argument during the
>>> generation phase.
>>> 
>>> I can provide more details on request.
>>> 
>>> David
>>> 
>>> 
>>> 
> 
> 
> I just spot checked one of my Xcode compile logs. I see the
> —serialize-diagnostics flag, but I don't have —as-needed anywhere.
> Maybe one of your CMake scripts is adding that in, or you have set
> some kind of environment variable that clang or Xcode is picking up?
> (This recently happened to me on Linux.)

Ed,

In this case cmake is attempting to determine if ‘—as-needed' is a supported option and the build should fail. 

I have searched (grep’d) everything I can think of for the string ’serialize-diagnostics’ with zero hits. 

I can easily add an ‘if( Xcode )’ around the setting in CMakeLists.txt however I’m trying to figure out what is exactly going on. The best solutions are chosen when you know what is going on under the hood.





More information about the CMake mailing list