为什么我无法将Mac框架文件与CMake链接?

时间:2013-06-12 15:59:06

标签: cmake

我有一个与MAC中的CMake有关的问题。我确保可执行程序将使用以下代码正确链接框架和库:

link_directories(directory_to_framework_and_libs)
add_executable(program ${FILE_LIST})
target_link_libraries(program framework_name lib1 lib2)

在第一行代码中,我表示可执行程序可以搜索框架和库的位置。在第三行代码中,框架和库将链接到可执行程序。但是,当我使用Xcode 4编译从cmake文件创建的xcode.project时,该项目一直抱怨它无法找到-lframework_nameld: library not found -lframework_name任何想法都将受到赞赏。

3 个答案:

答案 0 :(得分:17)

您不能以这种方式链接到框架,您必须使用find_library,因为它包含对OSX上的框架的一些特殊处理。

另外,不要使用link_directories,CMake使用库的完整路径,并且不需要它。

以下是AudioUnit的一些简单示例:

find_library(AUDIO_UNIT AudioUnit)
if (NOT AUDIO_UNIT)
    message(FATAL_ERROR "AudioUnit not found")
endif()

add_executable(program ${program_SOURCES})
target_link_libraries(program ${AUDIO_UNIT})

答案 1 :(得分:15)

另一种解决方案如下:

target_link_libraries(program "-framework CoreFoundation")
target_link_libraries(program "-framework your_frame_work_name")
set_target_properties(program PROPERTIES LINK_FLAGS "-Wl,-F/Library/Frameworks")

答案 2 :(得分:11)

你不需要所有这些麻烦(至少使用cmake 2.8.12)。

这很好用:

target_link_libraries(program stdc++ "-framework Foundation" "-framework Cocoa" objc)

当CMake看到以" - "开头的链接参数时,它不会前置" -l"并将参数原样传递给链接器(/ usr / bin / c ++)。

您需要框架的引号,以便CMake将这两个单词视为单个条目,并且不会添加" -l"之前"基金会"例如。