Предупреждения об устаревании OSX CMake

Я строю код с помощью 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

Рассмотрев справочную страницу для (Clang) gcc на моем Mac это звучит интересно:

 -Fdir
           Добавьте каталог директорий фреймворка в начало списка каталогов для поиска файлов заголовков. Эти каталоги чередуются с теми
           задаются параметрами -I и сканируются в порядке слева направо.

           Каталог фреймворков - это каталог с фреймворками в нем. Каркас представляет собой каталог с каталогом "Заголовки" и / или "PrivateHeaders"
           непосредственно в нем, который заканчивается в.framework. Имя фреймворка - это имя этого каталога, исключая ".framework". Заголовки, связанные с
           Фреймворк находится в одном из этих двух каталогов, в первую очередь ищется "Заголовки". Подрамник - это каталог фреймворка, который находится в
           Фреймворк "Frameworks". Включения заголовков подкадров могут появляться только в заголовке каркаса, который содержит подкадр, или в
           заголовок подрамника родного брата. Два подкадра - это братья и сестры, если они встречаются в одной структуре. Подрамник не должен иметь того же имени, что и
           рамки, предупреждение будет выдано, если это будет нарушено. В настоящее время подкадр не может иметь подкадров, в будущем механизм может быть
           расширен для поддержки этого. Стандартные рамки можно найти в "/ Система / Библиотека / Фреймворки" и "/ Библиотека / Фреймворки". Пример включает в себя взгляды
           как "#include", где Framework обозначает имя фреймворка, а header.h находится в "PrivateHeaders" или "Headers"
           каталог.

       -iframeworkdir
           Как и -F, за исключением того, что каталог рассматривается как системный каталог. Основной эффект заключается в том, чтобы не предупреждать о конструкциях, содержащихся в найденных заголовочных файлах.
           через реж.

Может быть, я должен искать -iframework, При строительстве с -iframework на терминале вручную это завершается без каких-либо предупреждений об устаревании.

Однако CMake не поддерживает возможность использовать -framework, От их find_library() документация:

CMake будет использовать -framework A и -F для связывания фреймворка с целью.

Я ищу любой способ, чтобы иметь спокойную сборку. У меня также есть (4x) меньшие предупреждения от интерфейса EVA OpenSSL'x, те, с которыми я могу справиться... заранее спасибо.

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)
Другие вопросы по тегам