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
会出现错误。有人可以帮我解决这个问题吗?
最佳答案
好吧,这是一个开场白:
您应该在知道如何构建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 不知道该做什么。
关于c++ - Makefile:编译 src 和测试目录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30210768/