为什么我不能将Mac framework文件与CMake链接?

为什么我不能将Mac framework文件与CMake链接?,cmake,Cmake,我有一个关于MAC中CMake的问题。我确保可执行程序将框架和库与以下代码正确链接: link_directories(directory_to_framework_and_libs) add_executable(program ${FILE_LIST}) target_link_libraries(program framework_name lib1 lib2) 在第一行代码中,我表示可执行程序可以搜索框架和库的位置。在第三行代码中,框架和库将链接到可执行程序。然而,当我使用xcode

我有一个关于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时,该项目不断抱怨它找不到
-lframew\u name
ld:library not found-lframew\u name
任何想法都将受到赞赏

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

另外,不要使用,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})

另一种解决办法如下:

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")

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

这很好:

target_link_libraries(program stdc++ "-framework Foundation" "-framework Cocoa" objc)
当CMake看到一个以“-”开头的链接参数时,它不会在“-l”前面加前缀,而是将参数原样传递给链接器(/usr/bin/c++)


您需要框架的引号,以便CMake将这两个词视为单个条目,而不是在“基础”之前添加“-l”。

如果没有更具体的细节,很难说出这里的错误。原则上,这似乎是正确的。但是,我建议避免使用(更多信息请参见文档),而是使用。这将允许您在
target\u link\u libraries
调用中传递到库的完整路径,如果未找到库,您将在CMake配置时而不是链接时收到错误。我认为您的
if not(…)
应该是
if(not…
。仍然无法使用CMake 2.8.12,如果
程序
实际上是静态库目标。在构建设置Xcode窗格中,链接器标志保持为空,框架搜索路径保持为空,在构建阶段窗格中,不添加依赖项,不添加链接。我注意到,在empty project中,定义链接器标志和搜索路径就足够了。这是一个适用于非系统、自定义路径框架的框架。这更符合标准的Apple实践,而且由于Apple框架都是特定于操作系统的(因此将对平台进行条件化),因此上述“一般”方法没有任何优势。