2012-09-22 38 views
6

Tôi đang cố gắng xây dựng tiểu dự án với cmake (đó là không dự án xcode hoặc thậm chí là ứng dụng cho iphone, kết quả là giao diện điều khiển đa nền tảng có thể thực thi được từ C++ lớp trừu tượng, viết bằng Objective-C++)Không thể liên kết khung công tác MacOS với CMake

tôi đang sử dụng hướng dẫn này để liên kết mac khung os: http://www.vtk.org/Wiki/CMake:HowToUseExistingOSXFrameworks

và macro này:

macro(ADD_FRAMEWORK fwname appname) 
find_library(FRAMEWORK_${fwname} 
    NAMES ${fwname} 
    PATHS ${CMAKE_OSX_SYSROOT}/System/Library 
    PATH_SUFFIXES Frameworks 
    NO_DEFAULT_PATH) 
if(${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND) 
    MESSAGE(ERROR ": Framework ${fwname} not found") 
else() 
    TARGET_LINK_LIBRARIES(${appname} ${FRAMEWORK_${fwname}}) 
    MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}") 
endif() 
endmacro(ADD_FRAMEWORK) 

Đây là phần quan trọng trong việc CMA keLists.txt

project(myprojectname) 
........ 
add_executable(mytarget src/mytarget.cpp) 

add_framework(CoreMedia mytarget) 
add_framework(CoreVideo mytarget) 
add_framework(AVFoundation mytarget) 
add_framework(Foundation mytarget) 
........ 

Và đó là những gì tôi đã khi cố gắng xây dựng:

WARNING: Target "mytarget" requests linking to directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/CoreMedia.framework". Targets may link only to libraries. CMake is dropping the item. 
WARNING: Target "mytarget" requests linking to directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/CoreVideo.framework". Targets may link only to libraries. CMake is dropping the item. 
WARNING: Target "mytarget" requests linking to directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/AVFoundation.framework". Targets may link only to libraries. CMake is dropping the item. 
WARNING: Target "mytarget" requests linking to directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/Foundation.framework". Targets may link only to libraries. CMake is dropping the item. 

Nó thực sự tìm thấy tất cả những khuôn khổ, nhưng không thể liên kết, trong đó sản xuất rất nhiều mối liên kết lỗi. Tôi khá chắc chắn rằng đó là lý do bởi vì tôi đã thực hiện một testproj bằng cách sử dụng XCode và nó có cùng một lỗi cho đến khi tôi liên kết tất cả các khung cần thiết.

Khi tôi chỉ cần sử dụng

FIND_LIBRARY(COREMEDIA_LIB CoreMedia) 
... 

sau đó COREMEDIA_LIB được thiết lập để NOTFOUND - những gì đang xảy ra? :/

Tôi googled rất nhiều nhưng không có gì :(Cảm thấy khá nhiều mất có

+1

Vâng, hãy làm việc với 'set (CMAKE_EXE_LINKER_FLAGS" -framework fm1-framework fm2 ... "' Tại sao không phải là http://stackoverflow.com/questions/822404/ làm thế nào để thiết lập-cmake-to-xây dựng-một-ứng dụng-cho-the-iphone cách làm việc? (câu trả lời với macro mà tôi thực sự cố gắng sử dụng) – dreamzor

Trả lời

16

Đó là buồn mà không ai trả lời :(Có phải làm việc chăm chỉ về vấn đề này và đã điều:. Bạn phải liên kết KHÔNG các frameworkname.framework thư mục trong TARGET_LINK_LIBRARIES, nhưng fwname.framework/fwname tập tin !!! Bây giờ nó hoạt động theo cách đó

vĩ mô thay đổi là thế này:.

macro(ADD_FRAMEWORK fwname appname) 
    find_library(FRAMEWORK_${fwname} 
    NAMES ${fwname} 
    PATHS ${CMAKE_OSX_SYSROOT}/System/Library 
    PATH_SUFFIXES Frameworks 
    NO_DEFAULT_PATH) 
    if(${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND) 
     MESSAGE(ERROR ": Framework ${fwname} not found") 
    else() 
     TARGET_LINK_LIBRARIES(${appname} "${FRAMEWORK_${fwname}}/${fwname}") 
     MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}") 
    endif() 
endmacro(ADD_FRAMEWORK) 

Hy vọng nó sẽ được hữu ích cho một người nào đó ...

+0

Điều này dường như thêm các khung trong "Other Linker Flags" AKA OTHER_LDFLAGS nhưng nó không thêm bất kỳ thứ gì vào tiêu đề "Header Search Paths" AKA HEADER_SEARCH_PATHS do đó mã của tôi không thể tìm thấy UIKit/UIKit.h. Gợi ý? – Emmanuel

+0

Trong trường hợp của tôi, không phải OTHER_LDFLAGS được đặt (hoặc, có vẻ như chúng được đặt thành giá trị trống, vì lable trong cửa sổ cài đặt Xcode Build được in đậm. – lef

Các vấn đề liên quan