在makefile中启动其他makefile

时间:2010-08-31 12:20:16

标签: makefile

由于我对linux上的构建过程/ makefile没有那么有经验,我遇到了以下问题:

设置: 我有一个makefile A,它需要在运行之前设置一些环境变量,这是通过运行. ./set_A_vars.sh(set_A_vars.sh包含许多export行)来完成的,然后再运行make -f A

现在我需要在makefile B中创建项目A. 我为makefile B尝试了以下设置:

all: debug release

A_debug:
    . ./set_A_vars.sh && make -f A DEBUG=1

A_release:
    . ./set_A_vars.sh && make -f A DEBUG=0

debug:   A_debug some_B_stuff_debug
release: A_release some_B_stuff_debug

然而我收到很多错误,听起来好像没有为B中的make -f A ...设置set_A_vars.sh中的环境变量。

如何从makefile B调用makefile A,并在makefile B中设置set_A_vars.sh中的环境变量?

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

你的makefile看起来很好用这些条件:

  1. 当您从makefile调用make时,请使用宏调用${MAKE}而不是普通make。 (这可以确保并行制作工作,也意味着即使您的制作有另一个名称(GNUmake说),它仍然有效。)

  2. 如果您的目标与实际文件不符,请使用.PHONY标记(见下文)。

  3. some_B_stuff_debug是否要求首先构建A?然后你必须说出来。

    some_B_stuff_debug: A_debug
    some_B_stuff_debug: A_release

    这显然是错误的。一种方法是通过shell强制执行排序。

  4. 尝试这样的事情:

    .PHONY: debug
    debug:
        . ./set_A_vars.sh && ${MAKE} -f A DEBUG=1
        ${MAKE} some_B_stuff_debug
    
    .PHONY: release
    release:
        . ./set_A_vars.sh && ${MAKE} -f A DEBUG=0
        ${MAKE} some_B_stuff_debug
    
    .PHONY: some_B_stuff_debug
    ∶
    

答案 1 :(得分:0)

你的文件应该有效。我建议你尝试以下方法:

  • 尝试从命令行运行set_A_vars.sh

  • 确认您设置的变量已设置。

  • make -f MakefileA,验证MakefileA确实可以很好地处理这些变量集。

  • 尝试使用MakefileB中的一项规则来测试其中一个变量,例如FOO

    test_var:
        @echo FOO is $(FOO)
    

    如果你刚刚运行set_vars.sh,这应该可行。如果没有,那么有几件事可能是错的......

  • 现在清除变量(包括FOO)并在MakefileB中尝试此规则:

    set_vars_and_test_them:
        ./set_A_vars.sh && echo FOO is $(FOO)
    

  • 现在把它放在一起:

    A_debug:
        ./set_A_vars.sh && make -f MakefileA DEBUG=1
    

    (我建议不要调用makefile“A”。)