makefile多个目标匹配
时间: 2023-08-09 17:11:59 浏览: 154
在 Makefile 中,你可以使用通配符匹配来定义多个目标。通配符可以匹配多个文件或目录。
例如,假设你有三个源文件 `foo.c`、`bar.c` 和 `baz.c`,你可以使用通配符 `*.c` 来匹配所有以 `.c` 结尾的文件,然后将它们编译为对应的目标文件。
```makefile
# 定义目标
objects: $(wildcard *.c)
gcc -c $^
# 编译所有目标
all: objects
```
在上面的示例中,`objects` 是一个目标,它依赖于所有以 `.c` 结尾的文件(使用 `$(wildcard *.c)` 进行通配符匹配)。当执行 `make objects` 命令时,Makefile 会自动将匹配到的源文件编译为目标文件。
你还可以定义其他多个目标,只需按照相同的方式使用通配符匹配即可。例如,你可以定义一个目标 `clean` 来删除所有生成的目标文件:
```makefile
# 清理生成的目标文件
clean:
rm -f *.o
```
当执行 `make clean` 命令时,Makefile 会删除所有以 `.o` 结尾的目标文件。
希望这可以帮助到你!如果还有其他问题,请随时提问。
相关问题
Makefile:44: *** 多个目标匹配。 停止。
在你的错误信息中,都出现了"多个目标匹配"的错误。
在引用中,报错信息是"makefile:7:***缺失分隔符。停止",这是因为在第7行缺少了分隔符(通常是一个tab键)。在makefile中,每个命令行必须以tab键开始,以使其与目标行区分开来。
在引用中,报错信息是"Makefile:1: *** 多个目标匹配",这是因为目标start没有正确定义或被重复定义。请确保目标只在makefile中定义一次。
在引用中,报错信息是"Makefile:44: *** 多个目标匹配",这是因为目标mtk_hif_sdio-objs被重复定义了。请确保每个目标只在makefile中定义一次,并且不要重复赋值。
总结起来,在编写makefile时,请确保每个命令行以tab键开始,并确保目标只在makefile中定义一次,不要重复赋值。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Linux报错问题解决:Makefile:7: *** 缺失分隔符 。 停止。](https://blog.csdn.net/m0_47470899/article/details/116851553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [Makefile:1: *** 多个目标匹配。 停止。](https://blog.csdn.net/weixin_30251587/article/details/95313539)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [linux Makefile 多个*.h、*.c 编译.ko文件参考](https://download.csdn.net/download/u010555230/10712421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
Makefile:2: recipe for target 'all' failed ../out/gcc-release/src/App.o.d:1: *** 多个目标匹配。 停止。 make: *** [all] Error 2
这个错误通常会出现在 Makefile 文件中存在多个目标匹配的情况下。在您的情况下,可能是因为 Makefile 中定义了多个名为 "all" 的目标。
要解决这个问题,您可以尝试以下几个步骤:
1. 检查 Makefile 文件中是否存在多个 "all" 目标。您可以使用文本编辑器打开 Makefile 文件,并查找是否有多个目标名称为 "all" 的行。如果找到了多个目标,请确保只保留一个 "all" 目标,并删除其他重复的目标。
2. 如果您的 Makefile 文件比较复杂,并且存在多个 include 语句,可以检查被包含的文件中是否也定义了名为 "all" 的目标。如果是这种情况,请确保每个文件中只定义一个 "all" 目标,并且在主 Makefile 文件中只引用一个 "all" 目标。
3. 如果您不确定哪个文件中定义了多个 "all" 目标,可以尝试在命令行中执行 `make -p` 命令,它会打印出 Makefile 的详细信息,包括所有的规则和变量。通过查看输出,您可以确定是否存在多个 "all" 目标定义。
希望以上提示对您有所帮助!如果您还有其他问题,请随时提问。