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.
-- 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