15

MAC の CMake に関する質問があります。次のコードを使用して、実行可能プログラムがフレームワークとライブラリを正しくリンクすることを確認します。

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

1 行目のコードでは、実行可能プログラムがフレームワークとライブラリを検索できる場所を示しています。3 行目のコードでは、フレームワークとライブラリが実行可能プログラムにリンクされます。ただし、cmake ファイルから作成された xcode.project を Xcode 4 でコンパイルすると、プロジェクトは見つからないという不平を言い続け-lframework_nameますld: library not found -lframework_name

4

4 に答える 4

28

この方法でフレームワークにリンクすることはできません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})
于 2013-06-12T19:39:19.990 に答える
17

この面倒なことはすべて必要ありません (少なくとも cmake 2.8.12 では)。

これはうまくいきます:

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

CMake が "-" で始まるリンク パラメーターを検出すると、"-l" を付加せず、引数をそのままリンカー (/usr/bin/c++) に渡します。

CMake が 2 つの単語を 1 つのエントリとして扱い、たとえば「Foundation」の前に「-l」を追加しないように、フレームワークの引用符が必要です。

于 2014-08-13T12:39:33.453 に答える