【问题标题】:Setting up Autotools for Vala project为 Vala 项目设置 Autotools
【发布时间】:2015-03-23 19:23:55
【问题描述】:

我正在尝试为我的一个 Vala 项目设置一个自动工具构建系统,这是我迄今为止提出的。

configure.ac

AC_INIT(White House, 1.0)
AC_CONFIG_SRCDIR(src/Window.vala)

AM_INIT_AUTOMAKE

AC_PROG_CC
AC_PROG_CC_STDC
AM_PROG_VALAC([0.7.0])
AC_PROG_INSTALL

WHITE_HOUSE_PACKAGES="--pkg gio-2.0 --pkg gtk+-3.0 --pkg gee-0.8 --target-glib 2.32 --pkg json-glib-1.0"
PKG_CHECK_MODULES(WHITE_HOUSE, [gio-2.0 gtk+-3.0 gee-0.8 json-glib-1.0])
AC_SUBST(WHITE_HOUSE_CFLAGS)
AC_SUBST(WHITE_HOUSE_LIBS)
AC_SUBST(WHITE_HOUSE_PACKAGES)

AC_CONFIG_FILES([
   Makefile
   resources/white-house.desktop
   resources/Makefile
   src/Makefile
])
AC_OUTPUT

Makefile.am

SUBDIRS = resources src
EXTRA_DIST = autogen.sh

src/Makefile.am

AM_CPPFLAGS = $(WHITE_HOUSE_CFLAGS)
bin_PROGRAMS = white-house

white_house_SOURCES = AutomapDialog.vala Drawable.vala Map.vala Preferences.vala Room.vala TextView.vala AutoMapper.vala Handle.vala Passage.vala RoomDialog.vala Tab.vala Window.vala
white_house_VALAFLAGS = $(WHITE_HOUSE_PACKAGES)

white_house_CFLAGS = $(WHITE_HOUSE_CFLAGS)

white_house_LDFLAGS = $(WHITE_HOUSE_LIBS)

资源/Makefile.am

desktopdir = $(datadir)/applications
desktop_DATA = white-house.desktop

icondir = $(datadir)/icons
icon_DATA = white-house.svg

当我运行 make 时,我收到很多src/File.c:####: undefined reference to some_function () 形式的错误。在我看来,这似乎没有正确通过 CFLAGS。我做错了什么?

编辑:经过进一步研究,我发现如果源文件在库之后传递给 gcc,则可能会出现“未定义引用”错误。这是 make 使用的命令。

gcc -std=gnu99 -pthread -I/usr/local/include/gee-0.8 -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/mirclient -I/usr/include/mircommon -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/json-glib-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include  -g -O2 -L/usr/local/lib -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgee-0.8 -ljson-glib-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0   -o white-house white_house-Window.o

如您所见,源文件是最后一行。如果我在 -l 参数之前移动它们,它编译得很好。那么问题来了:为什么 Makefile 把它们放在了错误的顺序上?

【问题讨论】:

    标签: autotools vala


    【解决方案1】:

    看起来我应该使用LDADD 而不是LDFLAGS。我的新Makefile.am如下。

    bin_PROGRAMS = white-house
    
    white_house_SOURCES = AutomapDialog.vala Drawable.vala Map.vala Preferences.vala Room.vala TextView.vala AutoMapper.vala Handle.vala Passage.vala RoomDialog.vala Tab.vala Window.vala
    white_house_VALAFLAGS = $(WHITE_HOUSE_PACKAGES) --target-glib 2.32
    white_house_CFLAGS = $(WHITE_HOUSE_CFLAGS)
    white_house_LDADD = $(WHITE_HOUSE_LIBS) -lm
    

    【讨论】:

      【解决方案2】:

      您通常希望设置white_house_CPPFLAGS,而不是white_house_CFLAGSCPPFLAGS 被传递给编译器和一些预处理步骤。此外,您应该能够在命令执行之前看到它们。如果没有,请尝试make V=1

      【讨论】:

      • 使用 CPPFLAGS 代替 CFLAGS 没有帮助。你是对的,我可以看到这些命令,它们看起来很好地包含了包,但是“未定义的引用”还有什么意思?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      相关资源
      最近更新 更多