免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6898 | 回复: 8
打印 上一主题 下一主题

搜索未果,请问Makefile如何检测操作系统类型 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-11 20:37 |只看该作者 |倒序浏览
有一个项目想在linux与hp-unix中都能运行。
这个项目用到一个外部的静态库,例如libabc.a,在程序编译连接的时候需要连接libabc.a,由于linux和hp-unix下libabc.a是不同的,而是我同时生成了libabclinux.a和libabcunix.a两个文件放在./lib目录中,在linux中编译时我连接libabclinux.a,在hp-unix中编译时我连接libabcunix.a,现在想写Makefile,自动检测系统的类型然后决定需要连接哪个库文件。
请问如果我用autotools生成Makefile,我该如何书写我的Makefile.am文件,谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-02-11 20:42 |只看该作者
呃,如果搜索google没犯忌讳的话,那么这个
http://groups.google.com/groups/ ... ;q=Makefile+os+type

论坛徽章:
0
3 [报告]
发表于 2008-02-11 20:52 |只看该作者
原帖由 jigloo 于 2008-2-11 20:42 发表
呃,如果搜索google没犯忌讳的话,那么这个
http://groups.google.com/groups/ ... ;q=Makefile+os+type


按照老兄的指引去搜了一下,有点启发。
好像他们用的是OSTYPE=$(OSTYPE)或者OSTYPE='uname',不知道$OSTYPE和uname是不是各操作系统通用的东西。

论坛徽章:
0
4 [报告]
发表于 2008-02-11 21:04 |只看该作者
如帖子所说,OSTYPE这个环境变量并不是总是有效。
所以还是`uname`保险点。(注意是反引号)
这儿还有一个中文的搜索结果网页
http://blog.codingnow.com/2007/08/gmake.html

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2008-02-11 21:10 |只看该作者
OS := $(shell uname -s)
IS_LINUX := $(shell echo $(OS)|grep -i linux)
IS_HP := $(shell echo $(OS)|grep -i hp)
ifdef IS_LINUX
LDFLAGS+=-L./lib -labclinux
else
ifdef IS_HP
LDFLAGS+=-L./lib -labcunix
endif
endif
以上为GNU make语法

论坛徽章:
0
6 [报告]
发表于 2008-02-11 21:27 |只看该作者
非常感谢cjaizss和jigloo
从二位分别提供的方法看,采用uname应该是一致的意见,待我测试一下。
不过版主提供的代码好像只能用于Makefile文件,用于Makefile.am文件来生成Makefile好像不行。

怎么样才能把这些代码放到Makefile.am中,供automake使用呢?

[ 本帖最后由 ldiqing 于 2008-2-11 22:24 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-02-12 09:19 |只看该作者
原帖由 ldiqing 于 2008-2-11 21:27 发表
非常感谢cjaizss和jigloo
从二位分别提供的方法看,采用uname应该是一致的意见,待我测试一下。
不过版主提供的代码好像只能用于Makefile文件,用于Makefile.am文件来生成Makefile好像不行。

怎么样才能把 ...


一个简单的办法是在 ./configure的时候指定 LDFLAGS

论坛徽章:
0
8 [报告]
发表于 2008-02-12 21:41 |只看该作者
原帖由 SST中国 于 2008-2-12 09:19 发表


一个简单的办法是在 ./configure的时候指定 LDFLAGS


那么该如何写呢,是不是应该写道configure.in文件中?

论坛徽章:
0
9 [报告]
发表于 2008-02-13 00:31 |只看该作者
如何使用 Autotools 获得系统类型,请参考 Autoconf 手册的 13.2 Getting the Canonical System Type;如何使用系统类型,13.3 Using the System Type。

楼主不应该让一个库在一个系统上存在着为适应多种系统而存在的多个版本。较好的的做法是在让你的库支持 Autotools,使用它提供的的系统平台检测功能,在安装的时候只安装和系统相适应的程序文件。另外,最好也让你的库支持现在流行的 pkg-config 使用界面。这样做了的话,你的库就可以非常容易被使用了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP