LIB_DIRS = abcd xyz pqr mnq ghj
SER_DIRS = klm
.PHONY: default build lib service clean distclean
TEST_DIRS = abcd xyz pqr
test_lib :
for dir in $(TEST_DIRS); do \
$(MAKE) -C $$dir; \
done
TESTS := $(addprefix TEST_, $(TEST_DIRS))
run : $(TESTS)
TEST_%:
./$*/test/$*_test --log_level=message
test : test_lib run
default: all
all: build lib service
lib:
for dir in $(LIB_DIRS); do \
$(MAKE) -C $$dir; \
done
每个LIB_DIR都有一个src和test目录。使用make all
命令只能编译src目录文件。但在我的情况下,测试目录文件也与src目录一起编译。使用make test
命令时,只编译测试目录文件。由于测试文件依赖于src文件,因此make all
会对测试文件发生错误。有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
嗯,这是一个启动者:
您应该在知道如何构建lib
和test
的每个目录中提供Makefile。显然,test
取决于lib
。
然后您可以将您的行更改为
lib:
for dir in $(LIB_DIRS); do \
$(MAKE) -C $$dir; \
done
到
lib:
for dir in $(LIB_DIRS); do \
$(MAKE) -C $$dir lib; \ #<- notice the target
done
和test_lib
类似。否则,使用当前变量集是不可能的,因为sub-make不知道该怎么做。