【问题标题】:wxWidgets autoconf setup doesn't set include dirs as -Isystem but as -IwxWidgets autoconf 设置未将包含目录设置为 -Isystem 而是设置为 -I
【发布时间】:2018-08-27 10:05:49
【问题描述】:

我继承了一个使用 autoconf 和 automake 构建的构建系统。除了高级别的,我完全不熟悉它是如何工作的。

构建系统本身运行良好。但是,系统标头会生成许多警告。就我而言,wxWidgets。其原因是 wxWidgets 的包含目录作为 -I 而不是 -isystem 传递。我在网上搜索过,但找不到如何更改。

以下代码在configure.ac文件中:

AM_OPTIONS_WXCONFIG
AM_PATH_WXCONFIG(3.0.2, wxWin=1, , ,[--debug=yes])
if test "$wxWin" != 1; then
    AC_MSG_ERROR([
                wxWidgets must be installed on your system
                but no wx-config script could be found.

                Please check that wx-config is in path, the directory
                where wxWidgets libraries are installed as returned by
                'wx-config --libs' is in the linker path (LD_LIBRARY_PATH
                or equivalent variable) and wxWidgets version is 2.9.4 or
                above.
        ])
    fi
if test "$wxWin" != 0; then
    AC_DEFINE(HAVE_WXWIDGETS,1,[define if the wxWidgets 3.0.2. or higher is available])
fi

然后有一个Makefile.am 执行以下操作:

bin_PROGRAMS = project
project_SOURCES     =   {sources here}


project_CPPFLAGS    =   $(AM_CPPFLAGS) $(PROJECT_CPPFLAGS) $(WX_CPPFLAGS)

project_CFLAGS      =   $(AM_CFLAGS)   $(PROJECT_CFLAGS)    $(WX_CFLAGS)

project_CXXFLAGS    =   $(AM_CXXFLAGS) $(PROJECT_CXXFLAGS) $(WX_CXXFLAGS)

project_LDFLAGS         =   $(AM_LDFLAGS)

project_LDADD       =   $(AM_LIBADD)   $(WX_LIBS)

似乎没有一个选项可以让我以某种方式将其指定为系统标头。

你们中有人知道我该如何解决这个问题吗?

【问题讨论】:

  • 您的意思是“-isystem”(带有小写“i”)吗?至少它是由 GCC 提供的,尽管它的使用并不常见。
  • @JohnBollinger 是 -isystem

标签: c++ autotools autoconf include-path


【解决方案1】:

这个问题与autoconf无关。罪魁祸首是wx-config 工具。该工具用于获取包含目录。例如调用wx-config --cxxflag 将导致:

-I/usr/lib/wx/include/gtk2-unicode-3.1 -I/usr/include/wx-3.1 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -pthread

传递给编译器。有几种方法可以解决这个问题。在输出中手动替换它或修补 wx-config。

【讨论】:

  • 您应该考虑查看使用默认选项时生成的特定警告。无论哪种方式,您的 wxWidgets 安装都存在缺陷,但尚不清楚该缺陷是否在 wx-config 中,而不是反映标头本身的 真正 缺陷、缺少或不正确的依赖项、等..
  • @JohnBollinger 这些是警告而不是错误。其中很多是由于标志-Wconversion。不确定我的安装是如何存在缺陷的,因为标头实际上包含被警告的代码。 wx-config 似乎更有缺陷,它实际上通知编译器 wx 头文件是项目的一部分,但事实并非如此。
  • 我认为这个想法是,如果编译器警告这些头文件的问题,那么头文件本身可能实际上是错误的。使用 -isystem 会抑制警告,但这并不一定意味着生成的代码是正确的。
  • @TomTromey 我现在不会开始维护 wxwidgets。这是一个外部依赖。我真的不在乎我的外部依赖项是否没有达到我自己代码的质量门槛。
  • @CryptoNoob,您的安装存在缺陷,要么是因为标头会引起编译器的警告,要么是因为 wx-config(这是安装的一部分)发出了错误的选项。它们是警告而不是错误只是意味着缺陷没有你想象的那么严重。它们只是警告并不意味着在不了解它们的性质的情况下忽略它们是安全的。
猜你喜欢
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多