MingW Autotools 编写Vala程序 之二

mingw(包括autotools) 包括了在windows编译的工具:autonconf,automake 立即下载

仔细看过了一些关于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_AUTOMAKE

LT_INIT
AC_PROG_CC
AM_PROG_VALAC

pkg_modules="gtk+-2.0 >= 2.24.1
             glib-2.0 >= 2.24.1
             gobject-2.0 >= 2.24.1"

VALA_CHECK_MODULES(HELLOWORLD,[$pkg_modules])


AC_CONFIG_FILES([Makefile
		src/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; then
      m4_default([$3],
        [AC_MSG_WARN([no proper vala compiler found])
         AC_MSG_WARN([you will not be able to compile vala source files])])
    else
      m4_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])[]dnl

  cat <<_ACEOF >conftest.vala
void main(){}
_ACEOF

  AS_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_pkgs
  unset vala_bindings
  ac_save_ifs="$IFS"; unset IFS
  for vala_pkg in $(echo "$1"); do
      vala_pkgs="${vala_pkgs:+$vala_pkgs }--pkg $vala_pkg"
      vala_bindings="${vala_bindings:+$vala_bindings }$vala_pkg"
  done
  IFS="$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_error

Consider 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])dnl
		AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
        AC_REQUIRE([_VALA_CHECK_COMPILE_WITH_ARGS])dnl
		AC_ARG_VAR([$1][_VALAFLAGS], [Vala compiler flags for $1])dnl

        VALA_MODULES="`echo $2 | sed -e 's/ [[=<>]]\+ [[0-9.]]\+//g'`"
        for MODULE in $VALA_MODULES; do
            $1[]_VALAFLAGS="$[]$1[]_VALAFLAGS --pkg $MODULE"
        done

        PKG_CHECK_MODULES([$1], [$2], [$3], [$4])

        pkg_failed=no
		AC_MSG_CHECKING([for $1 vala modules])

        _VALA_CHECK_COMPILE_WITH_ARGS([$1][_VALAFLAGS],
                                      [pkg_failed=yes],
                                      [pkg_failed=no])

		if test $pkg_failed = yes; then
		   AC_MSG_RESULT([no])
		   m4_default([$4], [AC_MSG_ERROR(
							[Package requirements ($2) were not met.])dnl
		   ])
		else
			AC_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.])])])])
])


AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事? AXI总线的transaction是burst-based的,因此有必要好好研究一下不同burst type的工作原理。此处略过burst的定义以及burst size、burst length等信号的介绍。 阅读详情

相关推荐

数字麦克风PDM信号采集与STM32 I2S接口应用(二)

在使用STM32的数字麦克风I2S接口时,计算采样率让人头疼,芯片手册上没有明确的说法,而手册上的计算方法经过测试却和实验不符。借助搜索引擎,大部分资料都是来自于开发板卖家或开发板论坛,主要是咪头采集然后配置WM89系列解码芯片,然后配合FatFS、MP3解码等模式,主要是讲解I2S录音、存储、放音等。外文资料得到的也寥寥无几,也没有找到讲解STM32数字麦克风配置、计算的文档。加上网上资料转载、抄袭、浅尝辄止的笔记教程,这些更是让检索大海捞针,过程艰辛一言难尽,有些网文三言两语抑或作者都没有搞清楚随手一写

XIAOYOUDUODUO的博客 6054

autoconf通用程序探测宏

分类: autotools2013-12-13 16:28 17人阅读 评论(0) 收藏 举报 autoconfautotools通用探测宏 完整代码下载: http://download.youkuaiyun.com/detail/zlyong0018/6709923   ----宏: AC_CHECK_PROG(variable, prog-to-check-for, va

GerryZhu的专栏 1473

CATIA二次开发CAA:(一)开发环境搭建

CATIA+CAA+RADE+VS2012

ysm1987的博客 1万+

5.现有测试

本系列文章均翻译自Autoconf官方文档:Autoconf Manual,github同步项目:question 5.2 备选程序 这些宏用于检查指定程序的存在或者行为。经常从几个备选程序中选择一个出来。 5.2.1 特殊程序检查 AC_PROG_LN_S 如果当前文件系统支持ln -s,设置输出变量LN_S为ln -s;否则,如果支持ln,设置LN_S为ln,否则设置为cp -pR。 AC_P...

ignorantshr的博客 429

一维光子晶体态密度计算与应用解析

态密度(DOS)是凝聚态物理和光子学中的核心概念,描述了量子态在能量空间的分布规律。基于麦克斯韦方程组的周期性介电结构分析表明,一维光子晶体通过布拉格散射形成光子带隙,其态密度曲线呈现典型的范霍夫奇点和禁带特征。这种特性使光子晶体在光学工程中具有重要价值,特别是在滤波器设计和传感器开发领域。通过转移矩阵法等数值计算手段,可以精确预测带隙位置和宽度,其中折射率对比度与周期数是关键设计参数。实际应用中,1550nm通信波段滤波器常采用Si/SiO2交替结构,而引入缺陷层则能产生高Q值缺陷模。计算优化时需注意数值

weixin_36487018的博客 193

Horn-Schunck光流算法的Python实现

光流是计算机视觉领域中的一个重要概念,它描述了图像中物体在时间上的运动。Horn-Schunck光流算法是一种经典的光流估计方法,通过对图像的亮度变化进行建模,来估计像素的运动速度。在本文中,我们将使用Python实现Horn-Schunck光流算法,并提供相应的源代码。请注意,该算法假设图像上的亮度变化主要由物体的运动引起,并且假设光流在整个图像上是稠密的。在上面的示例中,我们首先读取了两个输入图像,然后使用我们实现的Horn-Schunck光流算法估计了它们之间的光流。首先,我们需要导入一些必要的库。

持续更新 495

autoconf常用宏

AC_INIT (unique-file-in-source-dir)处理所有命令行参数并且寻找源代码目录。unique-file-in-source-dir是一些在包的源代码目录中文件; configure在目录中检查这些文件是否存在以确定该目录是否包含源代码。人们可能偶尔会用`--srcdir'给出错误的目录;这是一种安全性检查 AC_PREREQ (version) 确保使用的是

学习是为了探索这个世界的本质 2740

手把手教你学pcie--性能调优 - 中断机制优化

在PCIe系统开发中,中断机制是主机与设备之间通信的重要组成部分。然而,不当的中断设计可能导致CPU负载过高、延迟增加等问题。本文将详细介绍如何优化PCIe系统的中断机制,提升系统性能和响应速度。传统中断(INTx):通过专用引脚发送中断信号,可能引发冲突且效率较低。消息中断(MSI):通过内存写操作发送中断消息,避免冲突并提高效率。扩展消息中断(MSI-X):基于MSI改进,支持更多独立中断向量,适用于复杂场景。选择合适的中断模式对系统性能至关重要。

MHD0815的博客 283

移植patch到poky的笔记

c7c71c6 Set open mode for ts_calibate.c poky/meta/recipes-graphics/tslib/tslib/set-open-mode-for-ts_calibrate_c.patch +@@ -224,9 +225,11 @

xiaofeng_yan的专栏 1547

am62x A53与R5F通信

AM62x是Ti的一款异构多核芯片。remoteproc驱动,硬编码(写死)了R5F/M4F固件的名字,这样驱动启动时,就会找硬件编码的固件,下面是其对应关系。值得注意的是,linux内核中的M4F remoteproc驱动启动M4F,而linux内核中的R5F remoreteproc驱动不启动R5F,相反,它attach到已经在boot阶段启动的R5F固件上。在/lib/firmware的真实固件名:,而我们生成的固件名如下所示,没有直接对应的,经确认,.out文件就是我们需要的,重命名后即可。

鹰之翔 1358

OmniParser V2 和 OmniTool 让 AI 来控制 Windows 设备

OmniParser V2 和 OmniTool 是由微软开发的一套工具,通过屏幕解析技术让 AI 能够理解和控制 Windows 设备。OmniParser V2 是一款数据解析工具,可以解读屏幕内容,并将内容传递给大模型OmniTool 则是一个运行 Windows Agent 的工具,提供 Windows 界面给 AI 操作。

简简单单Onlinezuozuo 2730

MingW Autotools 编写Vala程序 之一

Vala是Gnome为了能加快GObject应用开发采用的一种新兴的面向对象语言,他的语法类似于微软的C#。作为一个GNU还好者,本人的很多PC应用程序,都是采用GTK+ 2.0开发的,当然也会实验性的了解Vala。 对于大部分了解GNU的人来说都会了解Makefile,很多人下载源码以后都会用configure编译和安装,而这些源于GNU的Autotools工具。他是一种能够动态的生成Make

嵌入式虚拟系统实验室 2015

TC397 EB MCAL开发从0开始系列 之 [17.1] ETH配置实战 - ping/发送

TC397 MCAL 从0开始之 ETH ping测试

yy九歌的博客 1505

git指令如何葱master转到dev_configure.ac

## Copyright 2008-2016 Red Hat, Inc.## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Fou...

weixin_36173545的博客 229

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

解决 configure.ac:17: error: possibly undefined macro: AC_PROG_LIBTOOL

安装时出现configure.ac:17: error: possibly undefined macro: AC_PROG_LIBTOOL                      If this token and others are legitimate, please use m4_pattern_allow.                      See the Autocon

鱼思故渊的专栏 4万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

例解 autoconf 和 automake 生成 Makefile 文件

模拟需求假设源文件按如下目录存放,如图1所示,运用autoconf和automake生成makefile文件。图 1文件目录结构 假设src是我们源文件目录,include目录存放其他库的头文件,lib目录存放用到的库文件,然后开始按模块存放,每个模块都有一个对应的目录,模块下再分子模块,如apple、orange。每个子目录下又分core,include,shell三个目录,其中co

Bekars涡轮增压的Blog ^_^ 1710

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

编写configure.ac/in文件加入mysql 的include和libs的路径自动检测或由用户指定.

<br />mysql不同linux下的安装路径不大相同,直接中包括,不同的版本下编译比较麻烦,装mysql也N种方法,还有x86和x64版本同时装的,搞得很混乱,参考了一下别人的检测做法,目前发现两种:<br /> <br />1. 装了mysql开发库之后(你Yum,build from source, emerge 等等),会顺便安装一个mysql_config的程序,它可以输出mysql的include和libs路径,  使用am工具可以在configure.ac写以下脚本,让用户自行给一个mysq

aerror的专栏 1万+

MSYS2 介绍与使用

MSYS2 MSYS2 的前世今生 Cygwin 这一切得从源头说起, 1995年Cygnus的一位工程师Steve Chamberlain, 他观察到Windows 系统使用COFF作为目标文件 (即可执行文件) 格式,与此同时GNU的工具链已经支持x86和COFF的目标文件,并提供C语言库newlib (Newlib 是嵌入式系统上的C标准库的实现) 。他认为既然GNU的工具链已经能够编译生成x86指令集的机器码并可链接生成COFF格式的目标文件, 而且还提供了可移植到任意平台的C标准库newlib,

qq_36525177的博客 3万+

关于autotools的安装以及使用

在嵌入式的工作中,对于编写makefile是不可缺少的技能,但是对于一些大型的项目,编写makefile文件相对来说比较麻烦,但是我们可以借助GNU Autotools工具进行实现。 我是用一个简单的例子来进行总结和归纳,一个最普通的输出 helloworld 的程序。这里交代一下取名为 main.c。 对于autotools的安装:  autotools是一系列的工具,包括:autocon

陈星的技术学习博客 2037

完整的Mingw开发环境(使用Autoconf,automake,libtool,libiconv and gettext)

大家使用gcc在windows下开发软件,有两个途径,一、Cygwin,二、Mingw32Cygwin可以使用autoconf,automake,libtool,libiconv and gettext(I18N/L10N) 进行完整的开发,但由于Cygwin 封装了一层底层库,所以运行速度较慢,因此要想用GCC开发Native Windows程序,则只有选择Mingw了,而Mingw却没有提供完

zzhb的专栏 4877

windows上安装mingw和配置autoconf

1. 到 http://sourceforge.net/projects/mingw/ 下载mingw, 点files, 会有Looking for the latest version? Download mingw-get-setup.exe (86.5 kB) 之类的下载mingw-get-setup.exe 之类的下载链接 2. 下载这个 mingw-get-setup.exe ,

糯米糊糊的专栏 1万+

Autotools的基本使用步骤

先按照一个简单的步骤实现一个automake的helloworld例子: 1, 创建一个实验路径 mkdir amhelloworld &&  cd amhelloworld 2, 创建一个src目录 mkdir -p src 3, 创建一个简单的helloworld.c程序源文件 vim amhelloworld.c #include #ifdef WITH

开心乐源的专栏 2252

Autotools使用一

autotools基础一般在linux上编译一个工程需要先调用./configure,大部分linux开源项目都使用autotools编译架构,都会有configure这个脚本。通过在执行./configure,产生Makefile,src/Makefile,config.h,为下一步编译做准备。随后调用make进行编译。一般步骤如下:./configure make make check su P

john_crash的专栏 1601

autotools 系列工具安装以及使用方法

1 安装autotools系列工具为了生成Makefile需要使用以下工具。 autoscan aclocal autoconf autoheader automake 这些工具在autoconf安装包和automake安装包中。可以下载源码安装。在安装时还需m4配合,没有的话网上找找。2 具体使用流程:2.1:autoscan在源代码目录中执行 autoscan,将会生成configure.sca

rongchun ji 4785

windows下安装MinGW及C++的环境配置

方法一——VS:   使用windows开发神器visio studio。这种方法比较简单,直接下载一个最新的vs安装就行。不单单是C++,C、C#、VB等都可以开发。 方法二——只安装C++编译器:   最常用的免费可用的编译器是 GNU 的 C/C++ 编译器,为了在 Windows 上安装 GCC,您需要安装 MinGW。 1.首先去MinGW主页下载最新版本的MinGW:&nbsp;www...

啊sir的专栏 14万+

windows + msys2编译ffmpge

windows + msys2编译ffmpeg

qq_16754667的博客 418
上一篇: MingW Autotools 编写Vala程序 之一
下一篇: FreeRTOS 8.2.1在MSP430 上的低功耗实现
知秋一叶
博客等级 码龄19年 196粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值