在mmp中判断SDK平台版本(转)

在mmp中判断SDK平台版本

16已有 475 次阅读  2010-02-24 10:38   标签:  mmp  SDK  平台  判断 
Coastline@Devdiv.net
转载请注明出处

相信在mmp中如何区分SDK平台版本,是很多朋友想做到的吧,遗憾的是到目前为止,还没有找到解决方案。
近日和同事提及这个问题的时候,我说可以用makefile来做,只是我对makefile的语法一知半解,一时也不想折腾了。同事Harry哥哥是Linux牛人,他说他来搞,结果很快就搞出来了。呵呵,所以这个解决方案很大程度上是他的功劳。我只是整理了一下代为发帖和大家分享。

下面介绍原理和步骤:

Epoc32\include\variant\下,有一个hrh文件(不同SDK版本可能这个hrh文件名也不同),里面定义了该SDK所使用的宏。本来如果Symbian想得周到一点的话,他大可以在这个hrh中放置一枚每个SDK唯一的宏,可是他没有这么做。现在我们就是要代替他做这个工作,一旦有了唯一的宏,我们就能在mmp中利用这个宏来区分5版了。
我们利用makefile检查SDK的安装路径,如果包含"S60_5th"字串,则判断为第五版SDK,虽说这个判断逻辑不是100%正确,但对于实际情况已经足够准确了,我想没有哪个家伙会闲得蛋疼把S60_5th这个字串也改了吧。
如果是第五版SDK,则在symbian_os.hrh中追加一个宏,这个宏就能在mmp中使用了。
思路就是这样。

1.从你第五版SDK的Epoc32\include\variant\下拷贝symbian_os.hrh文件至工程的bld.inf所处目录(一般都是group目录),并改名为symbian_os_mod.hrh以示区分。
编辑这个symbian_os_mod.hrh文件,在最后加上
/**
 * modified by Coastline
 * you can use the following macro to determine S60_5th in mmp
 */
#ifndef S60_5TH
#define S60_5TH
#endif

2.在bld.inf所处目录新建DetermineSDKVersion,mk文件,内容如下:
# ============================================================================
#  Name  : DetermineSDKVersion.mk
#  Part of  : 
#  Author : Coastline
#  Description: 
# ============================================================================
do_nothing :
@rem do_nothing

MAKMAKE : do_nothing

BLD : do_nothing
ifeq (S60_5th,$(findstring S60_5th, $(EPOCROOT)))
@echo ----------symbian_os.hrh replaced----------
copy symbian_os_mod.hrh $(EPOCROOT)\epoc32\include\variant\symbian_os.hrh
endif

CLEAN : do_nothing

LIB : do_nothing

CLEANLIB : do_nothing

RESOURCE : do_nothing

FINAL : do_nothing

3.在bld.inf中加上下面两行:
PRJ_MMPFILES
gnumakefile DetermineSDKVersion.mk
注,这两行最好放在你实际所使用的mmp之前。

4.可以在项目的mmp中使用S60_5TH这个宏:
#ifdef S60_5TH
LIBRARY OOXX.lib
#else
LIBRARY XXOO.lib
#endif
接下来分别使用五版、三版SDK编译看看,是不是可以啦,从此不用在切换SDK后手工在mmp中改动了,爽。

5.对于某些有洁癖的程序员哥哥,可以改进那个makefile,在CLEAN 分支对hrh文件作还原操作。不过这显然没有什么必要。
posted @ 2010-10-27 15:19  冰岛  阅读(696)  评论(0编辑  收藏  举报