我必须为Symbian OS做类似的事情。这就是我的操作方式:假设您要检查文件“ file_strange.h”是否存在,并且要根据该文件的存在情况包含一些标头或指向某些库的链接。
首先创建一个小的批处理文件以检查该文件是否存在。
autoconf很好,但是对许多小型项目来说却是致命的。
---------- check.bat
@echo off
IF EXIST [\epoc32\include\domain\middleware\file_strange] GOTO NEW_API
GOTO OLD_API
GOTO :EOF
:NEW_API
echo.#define NEW_API_SUPPORTED>../inc/file_strange_supported.h
GOTO :EOF
:OLD_API
echo.#define OLD_API_SUPPORTED>../inc/file_strange_supported.h
GOTO :EOF
---------- check.bat结束
然后我创建了一个gnumake文件
----------checkmedialist.mk
do_nothing :
@rem do_nothing
MAKMAKE :
check.bat
BLD : do_nothing
CLEAN : do_nothing
LIB : do_nothing
CLEANLIB : do_nothing
RESOURCE : do_nothing
FREEZE : do_nothing
SAVESPACE : do_nothing
RELEASABLES : do_nothing
FINAL : do_nothing
----------check.mk结束
在您的bld.inf文件中包含check.mk文件,该文件必须在MMP文件之前
PRJ_MMPFILES
gnumakefile checkmedialist.mk
现在在编译时,文件file_strange_supported.h
将设置适当的标志。您可以在cpp文件甚至mmp文件中使用此标志,例如在mmp中
#include "../inc/file_strange_supported.h"
#ifdef NEW_API_SUPPORTED
LIBRARY newapi.lib
#else
LIBRARY oldapi.lib
#endif
和.cpp中
#include "../inc/file_strange_supported.h"
#ifdef NEW_API_SUPPORTED
CStrangeApi* api = Api::NewLC();
#else
#endif