关于wince6.0中DIRS文件的问题
1、因为小弟最近需要将一款Radio芯片挂到一款基于WinCE6.0的ARM平台上,来实现Radio功能。因此小弟采用流驱动的方式来设计Radio的驱动。但考虑到以后可能会扩展其他的Radio芯片,但Radio的功能都是相同的,只是芯片不同而已。为了便于扩展,小弟采用的方式是将整个Radio生成一个Radio.dll文件,而与芯片有关的部分则生成一个lib文件。将这个与芯片有关的lib文件包含到生成radio.dll文件的地方的sources文件中。因此本人设计的编译路径如下:
上图就是驱动路径Drivers下Radio路径中的截图,其中的Dirs文件中的内容为:
DIRS= \
Radio\
RadioIc \
我的本意是:Radio路径下生成dll文件,而RadioIc路径下是各个具体芯片有关的内容,生成一个lib文件,这个lib文件会被包含在Radio路径下的Sources文件中。
现在的问题就是,我编译的时候,RadioIc路径下的lib文件不会生成。但我将上图中的Dirs文件中的内容换成:
DIRS= \
RadioIc \
Radio\
结果RadioIc路径下的lib文件就会生成。
RadioIc中的Sources文件中的内容如下:
TARGETNAME=Tda7703
TARGETTYPE=LIBRARY
RELEASETYPE=PLATFORM
NOMIPS16CODE=1
SOURCES= \
Radio_Tda7703.cpp \
RadioBase.cpp \
我的理解本来就是:含有SOURCES文件盒makefile文件的路径就是一个具体的独立的编译路径,这个路径就会生成一个lib或者dll或者exe文件的。但为什么我调整了下上面的顺序,结果就不同呢?
不要说我的Lib文件的路径指定的不对,我用我全盘搜索过的,前面那种顺序就是不会生成Lib文件,后面的就会。
2、DIRS文件中使用#号来注释某一行内容。但是我发现,在DIRS文件中,如果在某行注释内容后还有有效的不是被注释掉了的内容,这些内容也不会被编译到。例如:
DIRS= \
DRVLIB \
# NANDFLASH\
I2C\
那么下面的I2C路径就不会被编译到,很是奇怪。难道DIRS文件中#是注释掉当前行开始到文件结束?
[解决办法]
1. dirs 的目錄是照著順序來執行的, 若是有目錄之間有相依性(Dependence), 則順序必須要注意, 在這個例子中, RadioIc 必須放前面先被 compiler, 這樣才能產生 Radio 所需用到的 library.
2. dirs 中的 '\' 相當於將下一行與本行視為同一行 (有點像 C/C++ 中的 preprocessor), DRVLIB 會將下一行接上來, 但下一行是註釋, 所以最後的 '\' 不會被處理, 導致 I2C 被忽略.
Paul, Chao @ Techware