Thanks for the response.  I've moved to a more standard *nix layout for all
platforms, and will rely on a post-build step to create my framework (for
now).  If I find a fix, I'll be sure to share it here.


On Wed, Apr 29, 2015 at 5:22 AM, Eric Wing <ewmail...@gmail.com> wrote:

> On 4/25/15, David Hirvonen <dhirvo...@elucideye.com> wrote:
> > I'm hitting a link error when linking an iOS application with an
> internally
> > created framework/library using the the CMake Xcode generator and an iOS
> > toolchain.  I've put together a minimal CMakeLists.txt example here:
> >
> > https://github.com/headupinclouds/cmake_framework_test/
> >
> > The problem is described in detail in the the README, and reproduced here
> > in the email for completeness.
> >
> > The repository is intended as a simple unit test to illustrate an
> apparent
> > link and build location mismatch when linking a framework to an iOS
> > application using the "standard" iOS toolchain
> > <https://code.google.com/p/ios-cmake/> (I realize this toolchain isn't
> > provided with CMake). I've included the ios toolchain in this repository
> to
> > make it easy to reproduce the issue. I've include both the iOS
> application
> > that reproduces the link error, and an OS X application, which links to
> the
> > library in correct framework location. I'm looking for a CMakeLists.txt
> fix
> > or possible workaround. There are two top level convenience bash scripts
> > for building the applications with cmake using an xcode generator.  The
> > CMake version is 3.2.1.
> >
> > cmake --version
> > cmake version 3.2.1
> >
> > <
> https://github.com/headupinclouds/cmake_framework_test/blob/master/README.md#ios-framework-and-application-error
> >iOS
> > framework and application error:
> >
> > bash -fx ./test-ios.sh
> > + NAME=_builds/ios
> > + cmake -GXcode -H. -B_builds/ios -DCMAKE_TOOLCHAIN_FILE=iOS.cmake
> >
> > <snip>
> > clang: error: no such file or directory:
> >
> '/Users/dhirvonen/devel/cmake_framework_test/_builds/ios/Debug-iphoneos/TF.framework/Versions/A/TF'
> > ** BUILD FAILED **
> > The following build commands failed:
> >     Ld _builds/ios/Debug-iphoneos/testa.app/testa normal armv7
> > (1 failure)
> > library path:  _builds/ios/Debug-iphoneos/TF.framework/TF
> >
> > This produces a flat framework layout (ignoring the FRAMEWORK_VERSION
> > property (which is fine with me if I can get it to work)). It looks like
> > this:
> >
> > tree _builds/ios/Debug-iphoneos/TF.framework
> > _builds/ios/Debug-iphoneos/TF.framework
> > ├── Info.plist
> > ├── TF
> > └── _CodeSignature
> >     └── CodeResources
> >
> > But when it reaches the link command for the ios application:
> >
> > target_link_libraries(testa TF)
> >
> > it fails, since it seems to expect the library to be two directories down
> > within a versioned framework layout:
> >
> > TF.framework/Versions/A/TF
> >
> > instead the directory is here:
> >
> > TF.framework/TF
> >
> > I'm looking for a solution to either:
> >
> >    - correct the TF link path to use the actual (non versioned) framework
> >    layout that is currently generated, or
> >    - correct the framework so that it uses the versioned layout to make
> >    that consistent with the link path
> >
> > <
> https://github.com/headupinclouds/cmake_framework_test/blob/master/README.md#os-x-framework-and-application-success
> >OS
> > X framework and application success:
> >
> > When I build this for OS X it seems to work fine.
> >
> > bash -fx ./test-osx.sh
> > + NAME=_builds/osx
> > + cmake -GXcode -H. -B_builds/osx
> > <snip>
> > ** BUILD SUCCEEDED **
> > library path: _builds/osx/Debug/TF.framework/Versions/A/TF
> >
> > This produces a framework with the following layout:
> >
> > tree _builds/osx/Debug/
> > _builds/osx/Debug/
> > ├── TF.framework
> > │   ├── Resources -> Versions/Current/Resources
> > │   ├── TF -> Versions/Current/TF
> > │   └── Versions
> > │       ├── A
> > │       │   ├── Resources
> > │       │   │   └── Info.plist
> > │       │   ├── TF
> > │       │   └── _CodeSignature
> > │       │       └── CodeResources
> > │       └── Current -> A
> > └── testb
> >
> > and the call to
> >
> > target_link_libraries(testb TF)
> >
> > picks up the TF library in the correct location.
> >
> > I'm curious if there is a variable or property that needs to be set for
> the
> > iOS example to give the same framework layout.
> >
>
>
> I have not tried this (yet), but my guess is that CMake needs to be
> patched to understand iOS frameworks. iOS frameworks are new as of iOS
> 8. 3rd parties were not allowed to make frameworks before that.
> Additionally, CMake's framework support was implemented for Mac like a
> decade ago. Because the iOS framework structure (and .app structure
> for another matter) is different, CMake will likely need to be taught
> how to make a proper structure for iOS.
>
> If you do any work on this, I am interested in your results.
> Eventually, I would like to support iOS frameworks, though I'm
> probably at least 6 months from that since I need iOS 7 to drop off
> the face of the earth, which means after iOS 9 is released.
>
> (Note to non-iOS developers reading this: iOS does not allow flat
> .dylib files for shared libraries. You must build a framework.)
>
> -Eric
> --
> Beginning iPhone Games Development
> http://playcontrol.net/iphonegamebook/
>
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to