makefile隐晦规则
时间: 2023-07-10 15:25:42 浏览: 238
Makefile 中的隐晦规则(Implicit Rules)是指在规则中没有明确指定命令的情况下,Make会根据文件的扩展名或者文件类型来生成相应的命令。这些规则可以极大地简化 Makefile 的编写工作,使得 Makefile 变得更加易读和易于维护。
常见的隐晦规则如下:
1. 编译 C 程序
```
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
```
2. 编译 C++ 程序
```
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
```
3. 生成可执行文件
```
%: %.o
$(CC) $(LDFLAGS) $< -o $@
```
4. 生成静态库
```
lib%.a: %.o
$(AR) $(ARFLAGS) $@ $<
```
5. 生成动态库
```
lib%.so: %.o
$(CC) $(LDFLAGS) -shared $< -o $@
```
其中,$< 表示依赖文件(即源文件),$@ 表示目标文件,$(CC) 和 $(CXX) 分别表示 C 和 C++ 编译器,$(CFLAGS) 和 $(CXXFLAGS) 分别表示编译选项,$(LDFLAGS) 表示链接选项,$(AR) 表示静态库生成工具,$(ARFLAGS) 表示静态库生成选项。
需要注意的是,在使用隐晦规则时,文件的扩展名或者文件类型必须正确,否则 Make 无法自动匹配规则,从而导致编译失败。
相关问题
makefie 隐晦规则
Makefile中的隐晦规则指的是一些预定义的规则,用于根据文件后缀来自动推导生成目标文件的方法。这样,在Makefile中就不需要为每一个源文件都写一条生成目标文件的规则,可以大大简化Makefile的编写。
例如,当Makefile中包含以下规则:
```
%.o: %.c
gcc -c $< -o $@
```
当执行make命令时,如果存在一个名为foo.c的源文件,则Makefile会自动推导出生成foo.o目标文件的方法为:
```
gcc -c foo.c -o foo.o
```
在这个过程中,Makefile通过文件后缀名来自动匹配隐晦规则,并根据规则中的命令来生成目标文件。
除了上述的隐晦规则,Makefile还支持其他一些预定义的规则,例如:
- %.o: %.cpp:用于编译C++源文件。
- %.d: %.c:用于生成依赖关系文件。
- %.a: %.o:用于生成静态库文件。
- %.so: %.o:用于生成动态库文件。
需要注意的是,隐晦规则只能处理一些简单的情况,对于复杂的情况,还是需要手动编写规则来生成目标文件。
阅读全文