最近在搞vad,好像有三个月了,产品那边对vad效果还是不满意,我就开始打webRTC的主意,然后发现需要写makefile文件,那就写呗。
1. 对于大型项目,你不可能一个个gcc去编译每个文件,这时候就用makefile吧。
2. 代码就是下面这些
objects = vad.o vad_core.o vad_core_unittest.o vad_filterbank.o vad_filterbank_unittest.o vad_gmm.o vad_gmm_unittest.o vad_sp.o vad_sp_unittest.o vad_unittest.o webrtc_vad.o
edit:$(objects)
cc -o edit $(objects)
vad.o:vad.h checks.h
vad_core.o:vad_core.h signal_processing_library.h vad_filterbank.h vad_gmm.h vad_sp.h typedefs.h
vad_core_unittest.o:vad_unittest.h typedefs.h gtest.h
vad_filterbank.o:vad_filterbank.h signal_processing_library.h typedefs.h
vad_filterbank_unittest.o:vad_unittest.h typedefs.h gtest.h vad_core.h vad_filterbank.h
vad_gmm.o:vad_gmm.h signal_processing_library.h typedefs.h
vad_gmm_unittest.o:vad_unittest.h typedefs.h gtest.h
vad_sp.o:vad_sp.h signal_processing_library.h vad_core.h typedefs.h
vad_sp_unittest.o:vad_unittest.h typedefs.h gtest.h vad_core.h vad_sp.h
vad_unittest.o:vad_unittest.h signal_processing_library.h webrtc_vad.h typedefs.h gtest.h
webrtc_vad.o:webrtc_vad.h signal_processing_library.h vad_core.h typedefs.h
.PHONY:clean
clean:
rmedit:$(objects)
3. 需要注意的地方:
1. make的执行命令必须tab一下,如cc,这种命令
2. 可以使用变量代替你要重复写的.o文件,有点类似C语言的宏,对于宏,我也补充一些:
对于C语言的宏,可以理解为替换eg: #define PI 3.1415
注意: 1. 一般宏名都有大写
2. 宏末尾不加分号
3. 宏一般写在文件的开头,作用于其后面的部分
4. 宏 可用#undef来终止宏的定义
5. 可嵌套定义
6. 宏定义不分配内存,变量定义分配
3. vad_gmm_unittest.o:vad_unittest.h typedefs.h gtest.h中不需要写vad_gmm_unittest.c 这个文件,因为make执行的时候,会自动加上的,其他的也一样,并且 cc -c whatever.c 也会被推导出来
4. 以上属于最基本的op,后续会补充其他的操作
网友评论