标签 博客 下的文章

关于Makefile.am中与Build相关的变量设置

今天尝试使用autoconf和automake重新构建一个遗留库的Build环境。之前改造的lcut的目录结构还是相对简单,改造时并未遇到什么难题,不过今天就没那么幸运了,我在头文件目录包含设置这个看似简单的环节上遇到了一些小麻烦。

这个库结构其实也没那么复杂,只是源文件和头文件不在一个目录下罢了:
testproj/
    – Makefile.am
    – configure.in
    – include/
        – xx.h
        – yy.h
    – module1
        – xx.c
        – Makefile.am
    – moudle2
        – yy.c
        – Makefile.am
   
开始也没多想,参照以前的经验一步一步生成configure脚本。执行configure脚本生成Makefile文件,敲入make。在进入module1目录后,提示编译xx.c文件失败,无法找到xx.h!看了一下gcc的编译选项,的确没有-I上层的include目录,只有"-I."和"-I.."。翻看了一下automake的manual,发现automake默认情况下是将config.h所在的目录当作-I的参数。我的configure.in中是这样设置的:AC_CONFIG_HEADERS([config.h]),怪不得无法正确设置目录呢!将该句改为AC_CONFIG_HEADERS([include/config.h])后,重新生成Makefile并执行make,这回gcc命令行上出现了"-I../include"的字样,编译也很是顺利。

不过就这样算了,似乎总觉不妥,config.h只有一个,但如果有多个include目录的情况下该如何设置头文件包含目录呢?带着这个问题我再次翻看了automake的手册。老天不负有心人^_^,手册里确有这方面的说明。

原来automake从autoconf里继承了很多编译时需要的变量,诸如CC, CFLAGS, CPPFLAGS, DEFS, LDFLAGS,LIBS等等。但automake也可自己设置一些编译时用到的变量,automake与Build相关的一些变量名字也都以AM_开头,诸如AM_CPPFLAGS(与CPPFLAGS对应)。在Makefile.am中设置头文件包含的方式至少有以下两种:

* 在顶层Makefile.am中设置全局变量
AM_CPPFLAGS = -I $(top_srcdir)/include1
export AM_CPPFLAGS
这样在编译子目录(如module1)时,该全局设置也会起作用,在gcc编译命令行中你会看到-I ../include1。

* 在子目录层Makefile.am中设置局部变量
AM_CPPFLAGS = -I $(top_srcdir)/include2
这里的设置仅仅影响该目录下源文件的编译,对于其他同级目录下的源文件不起作用。另外如果此时顶层的Makefile.am中依然有AM_CPPFLAGS的设置,那么子目录下的Makefile.am中的这些设置会覆盖掉顶层的定义,在gcc编译命令行中也只会看到-I include2而无-I include1。

除了在Makefile.am中手工显式设置外,也可在执行configure脚本的时候通过传入CPPFLAGS参数来设定包含头文件位置,如configure CPPFLAGS=-I./include3。注意"CPPFLAGS"、"="和后面的值之间不能有空格。在automake manual中也有这方面的说明:在命令行中这里的CPPFLAGS将被放到AM_CPPFLAGS后面并一起传给gcc。

对于automake中的其他Build相关的AM_XXFLAGS变量,其道理也是相同的,这里就不赘述了。

这个十一累并快乐着

自从LP上班后,果果一直由岳母照顾。带小孩子是一件很辛苦的差事,这个我和LP也十分清楚,这不这个十一假期我们让岳母回家歇息歇息^_^,这七天就由我和LP照顾果果。

平时我和LP都是朝九晚五的作息,由于公司离家较远,我们下班到家基本上都是晚上六点以后了。我回家更晚,有时候到家时果果已经被哄睡着了。这样我们和果果在一起的时间实际上并不多,甚至对果果新近养成的一些习惯了解得都不多,一切还要慢慢适应。

以前喂奶、添加辅食、把尿等都是岳母一个人包办,现在我和LP共同承担。之前果果每天的作息基本已经养成:
1、早上6点果果睡醒,先把屎把尿;
2、喂白水(<50ml,早起成人要喝杯白水,婴儿也不例外^_^)
3、大约7点左右第一次喂奶(果果现在一次能喝180ml母乳,据说同龄男孩儿可以一次喝光240ml)。
4、陪着果果玩耍,直到8点半左右,哄果果睡觉(白天果果每觉都比较短,大约半个小时)
5、9点多果果睡醒,喂少量白水;
6、10点左右添加第一遍辅食-半个鸡蛋黄(用水搅成泥状,吃完后补充点白水,防止噎着)
7、11点左右第二次喂奶
8、陪着果果玩耍,直到12点左右,哄果果睡觉(现在天气冷了,一般不带果果出去看大自然了,另外果果已经五个多月了,从母体中携带的免疫因子正在减少,也怕带果果出去着凉生病)
9、12点半左右,果果睡醒,继续陪着她玩耍;
10、下午1点半左右添加第二顿辅食-50ml果汁或鲜水果煮的水(因为果汁或鲜水果煮的水都很甜,所以果果很爱喝)。
11、下午3点左右,第三次喂奶,一般果果吃完奶也会睡上一觉。
12、3点半或4点多果果醒来,陪她玩耍半个小时,然后给果果洗澡。(果果特别爱洗澡)
13、洗完澡的果果恢复了精力,能持续玩耍两个小时,到了晚上6点半或7点左右,第四次喂奶并哄果果睡觉。
14、凌晨1点半或两点,果果醒一次,LP第五次给果果喂奶。
15、果果一觉到天亮。

国庆前三天是“适应期”-我们要适应果果的作息。刚刚从工作状态转换为长假休息状态,这个身体还是很疲惫的,所以前三天我和LP都感觉特“困”,甚至有时陪果果在床上玩耍时都能睡着。另外果果也着实“不老实”并且精力充沛得很,看什么都是新鲜的,争着去抓去拿。果果这个阶段还喜欢“啃”东西,只要能拿到她手里的,全部往嘴里塞。所以时刻都要看住果果,不能离人。 哄果果睡觉是最累人的。果果困的时候,显得很是烦躁,大声喊叫,躺在床上左翻右翻,抱起来后小脑瓜儿是左转右转。另外果果体重近17斤,如果哄上一段时间仍然不能将她哄睡着,那胳膊就会开始酸痛。还好有我和LP两个人,我们可以换着哄^_^。

“适应期”过去后,一切变得自然了些,我和LP的体力也恢复了,白天也不感觉那么困倦了,带起果果来顺手多了。果果也适应了我们,之后家里更多的是果果的笑声和笑脸。不过给果果喂奶还是很费劲儿。果果一直吃母乳,LP白天上班将乳汁挤到专用的“母乳保鲜袋”里,再放到冰包里保存。回家放到冰箱里,留着果果白天用奶瓶喝。LP放假在家就不用这么麻烦了,果果可以直接吃母乳。不过不知道是不是果果习惯了奶瓶,这几天果果甚是不愿意直接吸母乳,除了半夜那次(果果夜里起来迷迷糊糊的,给什么都吃^_^)。这个问题让我们很是头疼,每次喂奶果果的大喊大叫又哭又闹的不愿意吃,直到换成奶瓶。

今天是十一假期的第六天了,如果说带果果不累那是假的,真的很累,甚至感觉比上班还累。不过正如dutor所说,这里面的“幸福和快乐”也许只有我自己才能体会到^_^。当然LP她也能体会到,呵呵!

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats