使用`include`来避免递归makefile的正确方法是什么?

时间:2014-02-20 02:37:04

标签: makefile

我不确定我是否理解了makefile中的include语句。我最近开始使用makefile使我的分析可以重现,并且认为我在复杂性增长之前是正确的轨道,并且似乎include语句是答案,因为我也试图避免递归makefile problem,同时试图让我的makefile保持理智。

为了测试包含什么,我运行了一个愚蠢的测试基本上创建了以下内容。

test_folder-|-makefile
            |-test_folder2-|
                           |-test2.mk

makefile我添加了include test_folder2/test2.mk,根据我的理解,它会添加test2.mk中的代码,所以当我运行make时,它也会运行{{1}在test2.mk中列出,但它只从target:dependencies运行target:dependencies

如果有人可以向我解释或指向另一个可能通过使用makefile语句来解释避免递归makefile的正确方法的博客/堆栈答案,那将会很棒。

PS:我的分析主要包括python和R脚本以及一些命令行工具。

生成文件

include

test2.mk

test.txt:
        echo "test.txt" > test.txt

include test_folder2/test2.mk

1 个答案:

答案 0 :(得分:1)

首先,没有名为test1的目录,所以我会相应地修改makefile。

其次,请注意test_folder2/test1.txt规则在本地构建test1.txt ,尽管它的名称。我想你想要的方法不止一种;一种方法是修改test_folder2/test2.mk

test_folder2/test1.txt:
    echo "this is a test" > test_folder2/test1.txt

要在make中运行test_folder/来执行此规则,您必须修改makefile。 要仅执行test_folder2/test1.txt规则,请执行以下操作:

test_folder2/test1.txt:

test.txt:
    echo "test.txt" > test.txt

include test_folder2/test2.mk

要执行这两个规则,请执行以下操作:

all: test.txt test_folder2/test1.txt

test.txt:
    echo "test.txt" > test.txt

include test_folder2/test2.mk

(请注意,“all”是makefile中首先出现的假目标的常规名称 - 因此是默认值 - 并且需要执行其他规则。如果愿意,可以使用其他名称。)

要执行test_folder2/test1.txt dirst,然后执行test.txt,请执行以下操作:

test.txt: test_folder2/test1.txt
    echo "test.txt" > test.txt

include test_folder2/test2.mk

(可以以相反的顺序执行它们,但它变得很丑陋。)

可以进一步改进,但这是一个开始。