2013-06-12 24 views
5

MACのCMakeに関する質問があります。私は実行可能プログラムは、フレームワークやライブラリを検索できる場所を示して、最初の行のコードでMac frameworkファイルをCMakeにリンクできないのはなぜですか?

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

を:私は実行可能なプログラムは、以下のコードで正しくフレームワークとライブラリをリンクすることを確認してください。 3行目のコードでは、フレームワークとライブラリが実行可能プログラムにリンクします。私はXcodeの4とcmakeのファイルから作成xcode.projectをコンパイルするときしかし、プロジェクトはそれが-lframework_nameを見つけることができないという不満を続け:ld: library not found -lframework_name任意のアイデアが理解されるであろう。それはOSX上のフレームワークのためのいくつかの特別な処理を含んでいるよう

+2

それは、より具体的な詳細なしに、ここで間違っているものを言うのは難しいです。原則として、正しいと思われる。しかし、私は(詳細はドキュメントを参照してください)[ 'link_directories'](http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:link_directories)の使用を避けることをお勧めしたいです代わりに['find_library'](http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_library)を使用してください。これにより、 'target_link_libraries'呼び出しでライブラリへの完全なパスを渡すことができます。ライブラリが見つからなければ、リンク時ではなくCMakeの設定時にエラーが発生します。 – Fraser

答えて

15

はあなたがfind_libraryを使用する必要があり、フレームワークにこの道をリンクすることはできません。

また、CMakeのは、ライブラリへの完全パスを使用し、link_directoriesを使用していないと、それは必要ありません。ここで

は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

あなたの 'ならない(...)'は 'if(NOT ...)'でなければなりません。 – Fraser

+0

確かに...ありがとう:) – Guillaume

+0

@Guillaumeありがとう、そして今それは動作します。 – feelfree

11

別の解決策は、次のとおりです。

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

あなたは(少なくともcmakeの2.8.12を持つ)すべてこの手間を必要としません。

これは正常に動作します:cmakeのが始まるリンクパラメータを見ているとき

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

「 - 」、それは「-l」付加しません。また、リンカー(は/ usr/binにそのまま引数を渡します。/C++)。

cmakeのは、単一のエントリとして二つの言葉を扱い、例えば「財団」の前に「-l」を追加しないようにするには、フレームワークのための引用符を必要としています。

関連する問題