gpt4 book ai didi

c - 使用 GNU Make 迭代文件目录

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:54 24 4
gpt4 key购买 nike

我的项目有一个名为 tests/ 的目录,其中包含任意数量的 C 源文件,每个文件都是一个独立的程序,旨在测试一个库。对于这些源文件中的每一个,我想在我的 build/ 目录中创建一个同名的可执行文件。

例如tests/test_init.c 将编译为可执行文件 build/test_init

目前,我的 Makefile 片段如下所示:

BUILD_DIR = build
TEST_DIR = tests

test_sources:= $(TEST_DIR)/*.c
test_executables:= $(patsubst %.c, %, $(test_sources))

.PHONY: tests

tests: $(test_executables)
$(CC) $^ -o $@ -g

但这无法产生预期的结果。任何帮助将不胜感激。

最佳答案

首先你需要wildcard function寻找来源:

test_sources:= $(wildcard $(TEST_DIR)/*.c)

然后是可执行文件的正确名称:

test_executables:= $(patsubst $(TEST_DIR)/%.c, $(BUILD_DIR)/%, $(test_sources))

然后一个pattern rule从相应的源构建测试可执行文件:

$(BUILD_DIR)/%: $(TEST_DIR)/%.c
$(CC) $< -o $@ -g

(static pattern rule 可能更简洁一些,但它是一种更高级的方法。)

最后一个phony构建所有测试的目标:

.PHONY: tests
tests: $(test_executables)

如果您想让 Make 运行所有这些测试,您可以制作一个虚假的模式规则 run_test_%,但这可以等到另一天。

关于c - 使用 GNU Make 迭代文件目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com