首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Vala项目设置Autotools

为Vala项目设置Autotools
EN

Stack Overflow用户
提问于 2015-03-23 19:23:55
回答 2查看 329关注 0票数 1

我正在尝试为我的一个Vala项目设置一个自动工具构建系统,下面是我到目前为止想出的。

configure.ac

代码语言:javascript
复制
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

代码语言:javascript
复制
SUBDIRS = resources src
EXTRA_DIST = autogen.sh

src/Makefile.am

代码语言:javascript
复制
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)

resources/Makefile.am

代码语言:javascript
复制
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。我做错什么了?

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

代码语言:javascript
复制
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把它们放在错误的顺序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-23 20:48:15

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-03-23 20:08:05

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29218675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档