0

CMakeに対してコンパイルする必要があるコードを使用してビルドしていScriptingBridgeます。

次のような何万ものログ行が表示されています。

In file included from /Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Security.framework/Headers/cssmapple.h:30,
                 from /Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Security.framework/Headers/Security.h:25,
                 from /Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h:9,
                 from /Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:70,
                 from /Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h:10,
                 from /Users/codebeaker/Projects/watchedit-client-code/src/libwhatsplaying/include/apple/itunes.h:5,
                 from /Users/codebeaker/Projects/watchedit-client-code/src/libwhatsplaying/src/osx/itunes_scripting_bridge.m:1:
/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Security.framework/Headers/cssmtype.h:142: warning: ‘CSSM_GUID’ is deprecated
/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Security.framework/Headers/cssmtype.h:143: warning: ‘CSSM_VERSION’ is deprecated
/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Security.framework/Headers/cssmtype.h:156: warning: ‘CSSM_GUID’ is deprecated
/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Security.framework/Headers/cssmtype.h:197: warning: ‘CSSM_DATA’ is deprecated
/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Security.framework/Headers/cssmtype.h:217: warning: ‘CSSM_DATA_PTR’ is deprecated
/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Security.framework/Headers/cssmtype.h:220: warning: ‘CSSM_DATA’ is deprecated

(ここに完全な広範な出力

ファイルは次のようにコンパイルされています。

/usr/bin/c++    -I/Users/codebeaker/Projects/watchedit-client-code/src/libwhatsplaying/include -I/Users/codebeaker/Projects/watchedit-client-code/src/libwhatsplaying/../libwatchedit/include    -x objective-c -o CMakeFiles/whatsplaying.dir/src/osx/itunes_scripting_bridge.m.o -c /Users/codebeaker/Projects/watchedit-client-code/src/libwhatsplaying/src/osx/itunes_scripting_bridge.m

/usr/bin/gcc -I/Users/codebeaker/Projects/watchedit-client-code/src/libwhatsplaying/include -I/Users/codebeaker/Projects/watchedit-client-code/src/libwhatsplaying/../libwatchedit/include    -F/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks  -x objective-c -o CMakeFiles/whatsplaying.dir/src/osx/itunes_scripting_bridge.m.o -c /Users/codebeaker/Projects/watchedit-client-code/src/libwhatsplaying/src/osx/itunes_scripting_bridge.m

私のMacで(Clang)のマニュアルページを確認したところ、gcc興味深いと思われることがあります。

       -Fdir
           フレームワークディレクトリディレクトリを、ヘッダーファイルを検索するディレクトリのリストの先頭に追加します。これらのディレクトリはそれらとインターリーブされています
           -Iオプションで指定され、左から右の順序でスキャンされます。

           フレームワークディレクトリは、フレームワークを含むディレクトリです。フレームワークは、「Headers」および/または「PrivateHeaders」ディレクトリが含まれているディレクトリです。
           その中で直接「.framework」で終わります。フレームワークの名前は、「。framework」を除いたこのディレクトリの名前です。に関連付けられたヘッダー
           フレームワークはこれら2つのディレクトリのいずれかにあり、「ヘッダー」が最初に検索されます。サブフレームワークは、
           フレームワークの「Frameworks」ディレクトリ。サブフレームワークヘッダーのインクルードは、サブフレームワークを含むフレームワークのヘッダー、または
           兄弟のサブフレームワークヘッダー。2つのサブフレームワークは、同じフレームワークで発生する場合は兄弟です。サブフレームワークは、
           フレームワークでは、これに違反すると警告が発行されます。現在、サブフレームワークにサブフレームワークを含めることはできません。将来的には、メカニズムは次のようになります。
           これをサポートするために拡張されました。標準フレームワークは、「/ System / Library/Frameworks」および「/Library/Frameworks」にあります。例にはルックスが含まれます
           「#include」のように、Frameworkはフレームワークの名前を示し、header.hは「PrivateHeaders」または「Headers」にあります。
           ディレクトリ。

       -iframeworkdir
           -Fと同様ですが、ディレクトリがシステムディレクトリとして扱われる点が異なります。主な効果は、見つかったヘッダーファイルに含まれる構成について警告しないことです。
           dir経由

多分私は探しているべきです-iframework。ターミナルでビルドする場合-iframework、これは非推奨の警告なしに手動で完了します。

ただし、CMakeはを使用するオプションをサポートしていません-framework。彼らのfind_library()ドキュメントから:

CMakeは-frameworkAと-Fを使用して、フレームワークをターゲットにリンクします。

静かなビルドをする方法を探しています。また、OpenSSL'x EVAインターフェースからの(4倍の)小さな警告があります。処理できる警告です...よろしくお願いします。

4

1 に答える 1

1

答えは、を使用する-iframeworkことでした。おそらく、これは、システムレベルの非推奨の警告を解決できない場合に、それらを無視することを目的としているためです。

代わりに、文書化され、どこでも利用できる-Wno-deprecated-declarationsフラグを使用することができました。GCCそれは信頼できます、そして私はそれを私のCMake宣言にそのように含めます:

IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
  find_and_add_framework(Foundation watchedit)
  find_and_add_framework(Cocoa watchedit)
  find_and_add_framework(AppKit watchedit)
  find_and_add_framework(ScriptingBridge watchedit)
  set_source_files_properties(${sources} PROPERTIES COMPILE_FLAGS
    "-xobjective-c -Wno-deprecated-declarations")
  set_source_files_properties(${sources} PROPERTIES LANGUAGE C)
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

恩恵を受ける人のために、ここにの実装がありfind_and_add_frameworkます。どこからクリブしたかはわかりませんが、自分の作品ではありません。

macro(FIND_AND_ADD_FRAMEWORK fwname appname)
    find_library(FRAMEWORK_${fwname}
        NAMES ${fwname}
        PATHS ${CMAKE_OSX_SYSROOT}/System/Library
        PATH_SUFFIXES Frameworks
        NO_DEFAULT_PATH)
    if( ${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND)
        MESSAGE(ERROR ": Framework ${fwname} not found")
    else()
        TARGET_LINK_LIBRARIES(${appname} ${FRAMEWORK_${fwname}})
        # MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}")
    endif()
endmacro(FIND_AND_ADD_FRAMEWORK)
于 2012-01-21T08:10:49.453 に答える