Makefile:编译src和测试目录时出错

时间:2015-05-13 09:29:22

标签: c++ makefile

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会对测试文件发生错误。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

嗯,这是一个启动者:

您应该在知道如何构建libtest的每个目录中提供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不知道该怎么做。