在tinyos当中,如果对应的application文件夹下面只有*.nc文件是没有办法完成编译的,我们还需要相应的makefile文件。
Makefile文件是编译的时候,指定ncc编译器去编译哪个程序(COMPONENT),并使用什么样的方式(由makerules所指定)去编译。
通常,一个标准的Makefile的内容为:
COMPONENT={application name}
include ../Makerules
和vvfang的blog当中所说的不同(可能是版本不同的原因),根据我的经验,实际上tinyos在编译每个app的时候,是会运行app里的makefile定义的include ../Makerules, 不信你把那条语句删掉试试,出现如下提示:
Make: *** No rule to make target ‘pc’ .Stop
tinyos程序的文件位置:
那么下一个问题就可以解决。例如不想把自己的app放到官方指定的位置: /opt/tinyos-1.x/apps,比如,我就把我自己编写和修改的程序放到如下文件夹: /opt/tinyos-1.x/apps/myworks 和官方给的例子程序区别开。程序放到这个文件夹下还是不可以直接编译的,我们需要把/opt/tinyos-1.x/apps 下面Makerules文件也复制到/opt/tinyos-1.x/apps/myworks下,编译就没有任何问题。
结论如下:
1. 在tinyos中,一次典型的编译需要如下文件在一个文件夹中:
moudule file
顶级configuration file
makefile
以及其他文件
系统已有的文件是不需要专门放到这个文件夹下面,tinyos的编译器会自己去找到相应的系统调用。
在makefile中有:
COMPONENT={application name}
include ../Makerules
COMPONENT必须和应用程序的名字一致,不需要和文件夹名字一致。
2. 自己编写的应用程序,不必非要放在apps文件夹下面,但是程序文件夹的上层(外层)必须有makerules文件,才可以成功编译。
观察到在/opt/tinyos-1.x/apps也有makefile,打开看到是对应该目录下所有的例子程序的make法则。那么你可以在/opt/tinyos-1.x/apps下,直接敲入
make pc
那么它对应的功能自然就是:编译所有例子程序!!!
不知道为什么,我这里在编译到HighFrequencySampling的时候出错,具体原因没时间仔细看,哪位同学有解决方案,请告知,谢谢!
附录:关于Make 及Makefile
无论是在Linux 还是在Unix 环境中,make 都是一个非常重要的编译命令。不管是自己
进行项目开发还是安装应用软件,我们都经常要用到make 或make install。利用