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
           将框架目录 dir 添加到要搜索头文件的目录列表的头部。这些目录与那些交错
           由 -I 选项指定并按从左到右的顺序扫描。

           框架目录是其中包含框架的目录。框架是包含“Headers”和/或“PrivateHeaders”目录的目录
           直接在它以“.framework”结尾。框架的名称是该目录的名称,不包括“.framework”。与相关的标头
           该框架位于这两个目录之一中,首先搜索“标题”。子框架是一个框架目录,它位于
           框架的“框架”目录。子框架标题的包含只能出现在包含子框架的框架的标题中,或者
           同级子框架标头。如果两个子框架出现在同一个框架中,则它们是兄弟框架。子框架不应与
           框架,如果违反,将发出警告。目前一个子框架是不能有子框架的,以后可能会有这个机制
           扩展以支持这一点。标准框架可以在“/System/Library/Frameworks”和“/Library/Frameworks”中找到。一个例子包括外观
           如“#include”,其中 Framework 表示框架的名称,而 header.h 位于“PrivateHeaders”或“Headers”中
           目录。

       -iframeworkdir
           像 -F 一样,除了目录被视为系统目录。主要效果是不对找到的头文件中包含的构造发出警告
           通过目录。

也许我应该寻找-iframework。在终端上构建时-iframework,手动完成,没有任何弃用警告。

但是 CMake 不支持使用-framework. 从他们的find_library()文档中:

CMake 将使用 -framework A 和 -F 将框架链接到目标。

我正在寻找任何方法来安静地构建。我还有来自 OpenSSL'x EVA 接口的 (4x) 更小的警告,我可以处理这些警告......在此先感谢。

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 回答