"规则命令行的约定-基于fpga的简易频谱分析仪"
在编写针对多系统的Makefile时,遵循一定的规则和约定至关重要,确保在不同的操作系统环境下保持兼容性。以下是一些关于Makefile和规则命令行的重要约定:
1. **使用sh而非csh**:在Makefile中编写规则时,应确保命令是`sh` shell支持的,而不是`csh`。这是因为`sh`是一种更为通用的shell,可以在多种系统上运行。
2. **限定使用的命令**:限制使用特定的一组命令,如`cat`, `cmp`, `cp`, `diff`, `echo`, `egrep`, `expr`, `false`, `grep`, `install-info`, `ln`, `ls`, `mkdir`, `mv`, `pwd`, `rm`, `rmdir`, `sed`, `sleep`, `sort`, `tar`, `test`, `touch`, `true`。这些命令在大多数系统上都广泛可用。
3. **使用gzip进行压缩**:在创建“dist”目标时,可以使用`gzip`来压缩文件,这是一个普遍接受的压缩工具。
4. **避免系统特定选项**:尽量避免使用特定系统特有的选项,例如`mkdir -p`在Linux中有效,但在某些其他系统中可能不支持。应该使用通用选项以确保跨平台兼容性。
5. **避免创建符号链接**:尽管在类Unix系统中通常可以创建符号链接,但某些系统(如MS-DOS)可能不支持。因此,避免在规则中使用`ln`命令创建符号链接。
6. **使用变量表示命令**:为了简化和维护Makefile,可以使用变量如`$(AR)`, `$(BISON)`, `$(CC)`, `$(FLEX)`等来代表编译器和工具程序。这样修改命令时,只需改变变量的值即可。如果需要使用如`ranlib`或`ldconfig`等工具,需检查当前系统是否支持,并在不支持的情况下提供合适的提示,而不是导致错误退出。
此外,关于GNUmake,这里提供了手册的一些章节概览:
- 第一章介绍了GNUmake的基本概念和预备知识。
- 第二章深入讲解了GNUmake的使用,包括Makefile的结构、规则、自动推导和清理操作。
- 第三章总结了Makefile的总体内容,如其构成、命名、包含、变量和其他特殊特性。
- 第四章详细阐述了Makefile的规则,包括依赖、通配符、目录搜索、伪目标等高级主题。
这些约定和知识对于编写可靠且跨平台的Makefile至关重要,能够帮助开发者构建高效且可移植的构建系统。