仔细看过了一些关于Vala的Autotool介绍,发现可以用GNU后来的vala.m4来简化Autotools过程,前提当然也是更新vala.m4的文件,整理后的configure.ac去掉了之前关于gtk的C开发方式的一些写法,请看下面:

AC_PREREQ([2.65])
AC_INIT([helloworld],[1.0],[example@gnome.org])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKELT_INIT
AC_PROG_CC
AM_PROG_VALACpkg_modules="gtk+-2.0 >= 2.24.1glib-2.0 >= 2.24.1gobject-2.0 >= 2.24.1"VALA_CHECK_MODULES(HELLOWORLD,[$pkg_modules])AC_CONFIG_FILES([Makefilesrc/Makefile])AC_OUTPUT

在新的vala.m4的文件中,使用了VALA_CHECK_MODULES的宏,可以轻易地得到以HELLOWORLD为前缀的三个FLAGS,如下

HELLOWORLD_CFLAGS = -mms-bitfields -Ic:/gtkmm/include/gtk-2.0 -Ic:/gtkmm/lib/gtk-2.0/include -Ic:/gtkmm/include/atk-1.0 -Ic:/gtkmm/include/cairo -Ic:/gtkmm/include/gdk-pixbuf-2.0 -Ic:/gtkmm/include/pango-1.0 -Ic:/gtkmm/include/glib-2.0 -Ic:/gtkmm/lib/glib-2.0/include -Ic:/gtkmm/include -Ic:/gtkmm/include/freetype2 -Ic:/gtkmm/include/libpng14  
HELLOWORLD_LIBS = -Lc:/gtkmm/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgmodule-2.0 -lgobject-2.0 -lgthread-2.0 -lglib-2.0 -lintl  
HELLOWORLD_VALAFLAGS =  --pkg gtk+-2.0 --pkg glib-2.0 --pkg gobject-2.0

在源代码中的Makefile.am中可以直接引用,看这个helloworld的例子,这几个变量可以通过autoconfig直接获得,进一步简化了Makefile.am的写法

AM_CPPFLAGS = $(HELLOWORLD_CFLAGS)

bin_PROGRAMS = helloworld

helloworld_SOURCES = main.vala
helloworld_LDADD = $(HELLOWORLD_LIBS)
helloworld_VALAFLAGS = $(HELLOWORLD_VALAFLAGS)

CLEANFILES = *.h *.c *.vapi *.stamp

最后附上最新的vala.m4文件

# Autoconf support for the Vala compiler# Copyright (C) 2008-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.# Check whether the Vala compiler exists in $PATH.  If it is found, the
# variable VALAC is set pointing to its absolute path.  Otherwise, it is
# simply set to 'valac'.
# Optionally a minimum release number of the compiler can be requested.
# If the ACTION-IF-FOUND parameter is given, it will be run if a proper
# Vala compiler is found.
# Similarly, if the ACTION-IF-FOUND is given, it will be run if no proper
# Vala compiler is found.  It defaults to simply print a warning about the
# situation, but otherwise proceeding with the configuration.
#
# AM_PROG_VALAC([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
# --------------------------------------------------------------------------
AC_DEFUN([AM_PROG_VALAC],[AC_PATH_PROG([VALAC], [valac], [valac])AS_IF([test "$VALAC" != valac && test -n "$1"],[AC_MSG_CHECKING([whether $VALAC is at least version $1])am__vala_version=`$VALAC --version | sed 's/Vala  *//'`AS_VERSION_COMPARE([$1], ["$am__vala_version"],[AC_MSG_RESULT([yes])],[AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no])VALAC=valac])])if test "$VALAC" = valac; thenm4_default([$3],[AC_MSG_WARN([no proper vala compiler found])AC_MSG_WARN([you will not be able to compile vala source files])])elsem4_default([$2], [:])fi])
# _VALA_CHECK_COMPILE_WITH_ARGS(ARGS, [ACTION-IF-TRUE],
#   [ACTION-IF-FALSE])
# --------------------------------------
# Check that Vala compile with ARGS.
#
AC_DEFUN([_VALA_CHECK_COMPILE_WITH_ARGS],
[AC_REQUIRE([AM_PROG_VALAC])[]dnlcat <<_ACEOF >conftest.vala
void main(){}
_ACEOFAS_IF([vala_error=`$VALAC $1 -q --cc="${CC} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS}" -o conftest$ac_exeext conftest.vala 2>&1`],[$2], [$3])
])])# _VALA_CHECK_COMPILE_WITH_ARGS# VALA_CHECK_PACKAGES(PKGS, [ACTION-IF-FOUND],
#   [ACTION-IF-NOT-FOUND])
# --------------------------------------
# Check that PKGS Vala bindings are installed and usable.
#
AC_DEFUN([VALA_CHECK_PACKAGES],
[unset vala_pkgsunset vala_bindingsac_save_ifs="$IFS"; unset IFSfor vala_pkg in $(echo "$1"); dovala_pkgs="${vala_pkgs:+$vala_pkgs }--pkg $vala_pkg"vala_bindings="${vala_bindings:+$vala_bindings }$vala_pkg"doneIFS="$ac_save_ifs"AC_MSG_CHECKING([for $vala_bindings vala bindings])_VALA_CHECK_COMPILE_WITH_ARGS([$vala_pkgs],[vala_pkg_exists=yes],[vala_pkg_exists=no])AS_IF([test x${vala_pkg_exists} = xno],[ifelse([$3], , [AC_MSG_ERROR([]dnl
[Package requirements were not met: $1$vala_errorConsider adjusting the XDG_DATA_DIRS environment variable if you
installed bindings in a non-standard prefix.
])],[AC_MSG_RESULT([no])
$3])],[AC_MSG_RESULT([yes])ifelse([$2], , :, [$2])[]dnl
])])# VALA_CHECK_PACKAGES# Check for Vala bindings for a package, as well as the pkg-config
# CFLAGS and LIBS for the package. The arguments here work the
# same as those for PKG_CHECK_MODULES, which is called internally.
# As a result, the _CFLAGS, _LIBS, and _VALAFLAGS variables will
# all be declared, rather than only _VALAFLAGS.
#
# VALA_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# --------------------------------------------------------------
AC_DEFUN([VALA_CHECK_MODULES],
[AC_REQUIRE([AM_PROG_VALAC])dnlAC_REQUIRE([PKG_PROG_PKG_CONFIG])dnlAC_REQUIRE([_VALA_CHECK_COMPILE_WITH_ARGS])dnlAC_ARG_VAR([$1][_VALAFLAGS], [Vala compiler flags for $1])dnlVALA_MODULES="`echo $2 | sed -e 's/ [[=<>]]\+ [[0-9.]]\+//g'`"for MODULE in $VALA_MODULES; do$1[]_VALAFLAGS="$[]$1[]_VALAFLAGS --pkg $MODULE"donePKG_CHECK_MODULES([$1], [$2], [$3], [$4])pkg_failed=noAC_MSG_CHECKING([for $1 vala modules])_VALA_CHECK_COMPILE_WITH_ARGS([$1][_VALAFLAGS],[pkg_failed=yes],[pkg_failed=no])if test $pkg_failed = yes; thenAC_MSG_RESULT([no])m4_default([$4], [AC_MSG_ERROR([Package requirements ($2) were not met.])dnl])elseAC_MSG_RESULT([yes])m4_default([$3], [:])fi[]dnl
])# Check whether the Vala API Generator exists in `PATH'. If it is found,
# the variable VAPIGEN is set. Optionally a minimum release number of the
# generator can be requested.
#
# VALA_PROG_VAPIGEN([MINIMUM-VERSION])
# ------------------------------------
AC_DEFUN([VALA_PROG_VAPIGEN],
[AC_PATH_PROG([VAPIGEN], [vapigen], [])AS_IF([test -z "$VAPIGEN"],[AC_MSG_WARN([No Vala API Generator found. You will not be able to generate .vapi files.])],[AS_IF([test -n "$1"],[AC_MSG_CHECKING([$VAPIGEN is at least version $1])am__vapigen_version=`$VAPIGEN --version | sed 's/Vala API Generator  *//'`AS_VERSION_COMPARE([$1], ["$am__vapigen_version"],[AC_MSG_RESULT([yes])],[AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no])AC_MSG_ERROR([Vala API Generator $1 not found.])])])])
])

MingW Autotools 编写Vala程序 之二相关推荐

  1. MingW Autotools 编写Vala程序 之一

    本文并非深奥的技术讨论,只是遇到的一些问题,花了很多精力解决,希望分享给大家 Vala是Gnome为了能加快GObject应用开发采用的一种新兴的面向对象语言,他的语法类似于微软的C#.作为一个GNU ...

  2. 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试

    原文地址:http://www.cnblogs.com/joyeecheung/p/3757915.html 相关随笔:  点击打开链接 Hadoop-1.0.4集群搭建笔记 用python + ha ...

  3. 基于Ubuntu(x86)系统和STM32(Keil)编写C程序分别进行编程、验证

    文章目录 实验内容 一.基本概念 (一).全局变量 (二).局部变量 (三).堆和栈 二.编程验证 (一).基于Ubuntu用Linux系统编写C程序 (二).基于STM32用Keil编写C程序 三. ...

  4. Java黑皮书课后题第8章:**8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府。当接收到用户输入后,程序报告答案是否正确。假设50个州以及它们的首府保存在一个二维数组中,提示用户回答所

    **8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 **8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府. ...

  5. Java黑皮书课后题第8章:*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点

    *8.31(几何:交点)编写一个方法,返回两条直线的交点.四个点存放在4*2的二维数组points中.编写一个程序,提示用户输入4个点,并显示交点 题目 题目描述 破题 代码 本题运行实例 题目 题目 ...

  6. Java黑皮书课后题第8章:*8.22(偶数个1)编写一个程序,产生一个6*6的填满0和1的二维矩阵,显示该矩阵,检测是否每行以及每列中有偶数个1

    *8.22(偶数个1)编写一个程序,产生一个6*6的填满0和1的二维矩阵,显示该矩阵,检测是否每行以及每列中有偶数个1 题目 题目描述 破题 代码 题目 题目描述 8.22(偶数个1)编写一个程序,产 ...

  7. Java黑皮书课后题第8章:**8.4(计算每个雇员每周工作的小时数)假定所有雇员每周工作的小时数存储在一个二维数组中。1行包含7列,记录了一个雇员7天的工作小时数。编写一个程序,按照总工时降序显示

    **8.4(计算每个雇员每周工作的小时数)假定所有雇员每周工作的小时数存储在一个二维数组中.1行包含7列,记录了一个雇员7天的工作小时数.编写一个程序,按照总工时降序显示 题目 题目描述 破题 代码 ...

  8. 《c primer pius》第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的

    <c primer pius>第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处 ...

  9. VS2017使用教程(使用VS2017编写C语言程序)二

    VS2017使用教程(使用VS2017编写C语言程序) < VS2017下载地址和安装 VS2010下载地址和安装教程 > C语言中文网推出辅导班啦,包括「C语言辅导班.C++辅导班.算法 ...

最新文章

  1. python安装numpy-python安装numpy和pandas的方法步骤
  2. 网页中Javascript代码的应用方式
  3. 私人定制---打造属于自己的linux小系统
  4. python awk 读文件_测试python awk sed 读取文件指定位置时的性能
  5. puTTY的配置导入和导出
  6. 快速序列化组件MessagePack介绍
  7. [转]/etc/passwd文件解析
  8. ubuntu14.04(server amd64)免密码sudo
  9. MATLAB绘制椭圆
  10. 遗传算法MATLAB
  11. 中心滤波与均值滤波MATLAB
  12. win10家庭版,双击bat文件无法运行_20200120
  13. 股票多空量化策略通过合理释放beta收益一定程度上提升了组合的收益风险比?
  14. Unity3D中GameObject 详细介绍
  15. 如何设置zotero连接到坚果云
  16. 嘟嘟牛mysql 密码_嘟嘟牛管家数据转化为万象、Pubwin的操作步骤
  17. Web3:价值投资的范式转移
  18. 千兆PHY与RJ45接口线序
  19. Kafka KSQL实战
  20. 修改登录页面Login

热门文章

  1. 10、格密码-抗量子计算
  2. c易语言自定义函数规则,【图】请教用易语言写通达信的自定义函数dll接口_选股公式,炒股公式,炒股,股票公式,炒股软件_股票软件技术交流论坛_理想论坛 - 股票论坛...
  3. 随堂练供应链物流——综合生产计划
  4. 关于嵌入式高端ARM核心板设计风格优缺点分析(作者 gooogleman)
  5. mysql数据库设计255_数据库中的 varchar(255) 原因剖析
  6. 山西省第十届计算机技能大赛,《附件2山西省第十届职业院校技能大赛比赛方案》.doc...
  7. 前端基础知识(更新中)
  8. python 的emulate函数封装_用模拟执行实现Objective-C代码自动化分析
  9. 微信小程序实现抖音切换视频效果
  10. Eigen欧拉变换演示