【问题标题】:How can I connect modules?如何连接模块?
【发布时间】:2015-02-15 21:58:33
【问题描述】:

所以,我正在尝试编写 Makefile.am 来检查构建的源代码和依赖项。

config.in

AC_PREREQ([2.68])
AC_INIT([hello], [1.0], [basinbug at yahoo.com])
AC_CONFIG_SRCDIR([src/hello.cpp])
AM_INIT_AUTOMAKE

AC_PROG_CXX

PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.10])

AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT

src/Makefile.am

bin_PROGRAMS = hello

hello_CFLAGS = $(GTK_CFLAGS)
hello_LDFLAGS = $(GTK_LIBS)

hello_SOURCES = hello.cpp

当我运行“make”时会发生什么

Making all in src
make[1]: Entering directory `/home/maza/123/src'
g++ -DPACKAGE_NAME=\"hello\" -DPACKAGE_TARNAME=\"hello\" -DPACKAGE_VERSION=\"1.0\" -DPACKAGE_STRING=\"hello\ 1.0\" -DPACKAGE_BUGREPORT=\"basinbug\ at\ yahoo.com\" -DPACKAGE_URL=\"\" -DPACKAGE=\"hello\" -DVERSION=\"1.0\" -I.     -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello.o hello.cpp
hello.cpp:2:21: fatal error: gtk/gtk.h: No such file or directory
compilation terminated.
make[1]: *** [hello.o] Error 1
make[1]: Leaving directory `/home/maza/123/src'
make: *** [all-recursive] Error 1

如果我使用 AC_PROG_CC,它们用于编译字符串,通过 AC_PROG_CXX 则不使用

【问题讨论】:

  • 您看到您的配置脚本检查 GTK+ 并找到它?这些GTK_* 变量在生成的Makefile 中有什么值?
  • GTK_CFLAGS = -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include ... GTK_LIBS = -lgtk-x11- 2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 ....
  • 那些没有在编译行上使用。那就是问题所在。但我不知道为什么。我认为hello_CFLAGS 行会做到这一点。
  • 如果我用 AC_PROG_CC 来编译字符串,通过 AC_PROG_CXX 就不用了
  • 您应该使用 CPPFLAGS 包含,而不是 CFLAGSCXXFLAGS。 (CPP = C PreProcessor,适用于 C 和 C++,是实际处理 #include 指令的东西。)

标签: c++ makefile gtk configure


【解决方案1】:

您告诉自动工具您的项目是一个 C++ 项目(带有AC_PROG_CXX),但您随后设置了一个 C 标志变量(hello_CFLAGS)。

C++ 的匹配变量是hello_CXXFLAGS

也就是说,这些都不是用于此用法的正确标志。正确的标志(感谢 ptomato)是 hello_CPPFLAGS

【讨论】:

    猜你喜欢
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多