使用 Makefile 从不同的目录执行目标文件
Execute object files from different directories using Makefile
我有以下 Makefile 条目:
TEST_DIRS = abcd pqr xyz
test_lib :
for dir in $(TEST_DIRS); do \
$(MAKE) -C $$dir; \
done
run :
./abcd/test/abcd_test.o --log_level=message
./pqr/test/pqr_test.o --log_level=message
./xyz/test/xyz_parser_test.o --log_level=message
test : test_lib run
我不想为 运行 目标编写 3 个单独的命令,而是使其通用。这样每次添加新的测试文件时,我都不想在 运行 目标下添加新命令。有人可以帮助我吗?
假设命名方案是一致的(那些只是奇怪命名的二进制文件,而不是实际的目标文件)那么这样的事情应该有效:
使用 shell 循环:
run :
for name in $(TEST_DIRS); do \
./$$name/test/$${name}_test.o --log_level=message; \
done
使用 make foreach
:
run :
$(foreach name,$(TEST_DIRS),./$(name)/test/$(name)_test.o --log_level=message;)
TESTS := $(addprefix TEST_, $(TEST_DIRS))
run: $(TESTS)
TEST_%:
./$*/test/$*_test.o --log_level=message
我有以下 Makefile 条目:
TEST_DIRS = abcd pqr xyz
test_lib :
for dir in $(TEST_DIRS); do \
$(MAKE) -C $$dir; \
done
run :
./abcd/test/abcd_test.o --log_level=message
./pqr/test/pqr_test.o --log_level=message
./xyz/test/xyz_parser_test.o --log_level=message
test : test_lib run
我不想为 运行 目标编写 3 个单独的命令,而是使其通用。这样每次添加新的测试文件时,我都不想在 运行 目标下添加新命令。有人可以帮助我吗?
假设命名方案是一致的(那些只是奇怪命名的二进制文件,而不是实际的目标文件)那么这样的事情应该有效:
使用 shell 循环:
run :
for name in $(TEST_DIRS); do \
./$$name/test/$${name}_test.o --log_level=message; \
done
使用 make foreach
:
run :
$(foreach name,$(TEST_DIRS),./$(name)/test/$(name)_test.o --log_level=message;)
TESTS := $(addprefix TEST_, $(TEST_DIRS))
run: $(TESTS)
TEST_%:
./$*/test/$*_test.o --log_level=message