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

fee*_*ree 8 cmake

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

link_directories(directory_to_framework_and_libs)
add_executable(program ${FILE_LIST})
target_link_libraries(program framework_name lib1 lib2)
Run Code Online (Sandbox Code Playgroud)

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

Gui*_*ume 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})
Run Code Online (Sandbox Code Playgroud)


fee*_*ree 16

另一种解决方案如下:

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")
Run Code Online (Sandbox Code Playgroud)


gas*_*ard 13

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

这很好用:

target_link_libraries(program stdc++ "-framework Foundation" "-framework Cocoa" objc)
Run Code Online (Sandbox Code Playgroud)

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

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