【问题标题】:Makefile: Error while compiling src and test directoriesMakefile:编译 src 和测试目录时出错
【发布时间】:2015-05-13 09:29:22
【问题描述】:
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 对测试文件会发生错误。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 看来src目录是abcdxyzpqr;测试目录也是abcdxyzpqr。你想编译 src 目录下的文件,而不是 test 目录下的文件?
  • 是的。当我说make all 时,应该只编译src 目录。当我说make test 时,应该只编译test 目录。
  • 我认为 Beta 要求的是,src 目录是什么?您继续使用该术语,但您的 makefile 中没有与src 相关的任何内容。 src 是指lib 目标和LIB_DIRS 变量的内容吗?会出现什么错误?您的意思是在 src 目录之前构建测试目录吗?您的问题令人困惑,不清楚您到底要做什么。
  • 对造成的混乱表示歉意。是的,src 表示 LIB_DIRS,test 表示 TEST_DIRS。 test 目录在 src 目录之前编译。
  • 在您的编辑中,您向LIB_DIRS 添加了两个目录,但问题仍然存在:您说您要编译一组目录而不是另一组,但其中一个是 目录abcd 是LIB_DIRS 的成员,也是TEST_DIRS 的成员;奥林匹斯的所有神都不能编译一个但不能编译另一个,这是不可能,我投票关闭。

标签: c++ makefile


【解决方案1】:

好吧,这是一个开胃菜:

您应该在知道如何构建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 不知道该做什么。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多