MantisBT - CMake
View Issue Details
0012550CMakeCMakepublic2011-11-01 17:222012-05-09 15:26
Aaron Simmons 
Brad King 
highmajoralways
closedfixed 
i386Mac OS X10.6
CMake 2.8.6 
CMake 2.8.7CMake 2.8.7 
0012550: frameworks with spaces breaks cmake
Trying to use target_link_libraries with a framework that contains spaces (such as the "Adobe AIR.framework" in the AIR SDK) doesn't work.
From an unanswered email on the cmake forums http://www.mail-archive.com/cmake@cmake.org/msg38710.html: [^]


I'm having trouble linking my OS X application to a specific framework using
CMake without explicitly setting linker flags (somewhat defeating the
purpose of using CMake for cross-platform building). Say I have a framework
called "My Framework.framework". CMake successfully finds the framework
when I run:

find_library(MY_LIB \"My\ Framework\")

Then I link to my target with:

target_link_libraries(MyTarget ${MY_LIB})

The resulting linker flag is:

-Framework My Framework

This of course is incorrect and will cause gcc to try to link to "My" and
"Framework separately.

The solution is to write the linker flags myself, as follows:
set(CMAKE_EXE_LINKER_FLAGS -framework\ \"My\ Framework\")

Is there a better way?

BTW, I tried to fix up the name by replacing " " with "\ " i.e.

string(REPLACE " " "\\ " MY_LIB_FIX ${MY_LIB})

Such that MY_LIB_FIX is /Library/Frameworks/My\ Framework.framework. But to
my dismay, CMake interprets this format differently and produces a warning
that says "[the path] is a full-path but not a valid library file name."
 The the resulting linker flag is -l rather than the required -framework.
No tags attached.
Issue History
2011-11-01 17:22Aaron SimmonsNew Issue
2011-11-02 08:46Brad KingAssigned To => Brad King
2011-11-02 08:46Brad KingStatusnew => assigned
2011-11-02 08:53Brad KingNote Added: 0027707
2011-11-02 09:11Brad KingNote Added: 0027708
2011-11-02 09:11Brad KingStatusassigned => resolved
2011-11-02 09:11Brad KingResolutionopen => fixed
2011-12-16 17:23David ColeFixed in Version => CMake 2.8.7
2011-12-16 17:23David ColeTarget Version => CMake 2.8.7
2012-05-09 15:26David ColeNote Added: 0029448
2012-05-09 15:26David ColeStatusresolved => closed

Notes
(0027707)
Brad King   
2011-11-02 08:53   
You shouldn't need any backslashes for the find_library call. This should work:

  find_library(MY_LIB "My Framework")

You can work around this issue by passing the framework like this:

  target_link_libraries(MyTarget "-framework \"My Framework\"")
(0027708)
Brad King   
2011-11-02 09:11   
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e74f3744 [^]
(0029448)
David Cole   
2012-05-09 15:26   
Closing resolved issues that have not been updated in more than 4 months.