使用Makefile从不同目录执行对象文件

使用Makefile从不同目录执行对象文件,makefile,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

我有以下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

我不想为run target编写3个单独的命令,而是将其设置为通用命令。所以每次添加一个新的测试文件时,我都不想在runtarget下添加一个新命令。有人能帮我吗?

假设命名方案是一致的(那些只是命名奇怪的二进制文件,而不是实际的对象文件),那么类似的东西应该可以工作:

使用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