弃用通知使用GTKMM和C ++ 11进行构建

时间:2015-09-15 13:04:53

标签: c++11 compiler-warnings gtkmm

我正在尝试将GTKMM用于一个利用C ++ 11功能的项目。 问题是显然C ++ 11不赞成语言的某些部分,GTKMM似乎正在使用它。

有没有办法摆脱这些消息,同时为我的代码保留有用的编译器警告?

编译器是Linux上的GCC 5.2。这些是我正在谈论的通知:

In file included from /usr/include/glibmm-2.4/glibmm/wrap.h:23:0,
                 from /usr/include/glibmm-2.4/glibmm/containerhandle_shared.h:26,
                 from /usr/include/glibmm-2.4/glibmm/arrayhandle.h:23,
                 from /usr/include/glibmm-2.4/glibmm.h:91,
                 from /usr/include/gtkmm-3.0/gtkmm.h:87,
                 from test.cpp:1:
/usr/include/glibmm-2.4/glibmm/objectbase.h:215:13: warning: ‘template<class> class std::auto_ptr’ is deprecated [-Wdeprecated-declarations]
 static std::auto_ptr<Threads::Mutex> extra_object_base_data_mutex;
             ^
In file included from /usr/include/c++/5.2.0/memory:81:0,
                 from /usr/include/glibmm-2.4/glibmm/objectbase.h:32,
                 from /usr/include/glibmm-2.4/glibmm/wrap.h:23,
                 from /usr/include/glibmm-2.4/glibmm/containerhandle_shared.h:26,
                 from /usr/include/glibmm-2.4/glibmm/arrayhandle.h:23,
                 from /usr/include/glibmm-2.4/glibmm.h:91,
                 from /usr/include/gtkmm-3.0/gtkmm.h:87,
                 from test.cpp:1:
/usr/include/c++/5.2.0/bits/unique_ptr.h:49:28: note: declared here template<typename> class auto_ptr;

如果编译器参数有问题,这里是CMakeLists(从OpenCV项目中重用,请告诉文件中有什么问题):

cmake_minimum_required(VERSION 3.3.0 FATAL_ERROR)
list( APPEND CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs -libs")

project( interface )
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTKMM REQUIRED gtkmm-3.0)
include_directories(${GTKMM_INCLUDE_DIRS})
link_directories(${GTKMM_LIBRARY_DIRS})
add_definitions(${GTKMM_CFLAGS_OTHER})
add_executable( interface test.cpp )
target_link_libraries(interface ${GTKMM_LIBRARIES})

2 个答案:

答案 0 :(得分:4)

我们最近在glibmm中解决了这个问题: https://bugzilla.gnome.org/show_bug.cgi?id=748630#c11

因此,为您的构建修复它的最佳方法是尽可能更新glibmm和gtkmm版本。

答案 1 :(得分:2)

只是一个肮脏的黑客(因为可能在GTKMM中使用auto_ptr是有问题的,所以你想向GTKMM报告错误);您可以使用一些diagnostic pragmas并将<{1}}替换为

#include <gtkmm.h>

但是//untested code #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include <gtkmm.h> #pragma GCC diagnostic warning "-Wdeprecated-declarations" 确实在C ++ 11中被弃用了,我不确定它是否与你的C ++ 11标准库混合得很好。 (也许使用Qt5代替 GtkMM 可能是合理的,因为GtkMM可能不会长时间保持,但似乎问题know;否则希望并可能有助于改进gtkmm的)。

您可能还应该在测试中使用valgrind