我不得不为 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