我不确定我是否理解了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
答案 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
(可以以相反的顺序执行它们,但它变得很丑陋。)
可以进一步改进,但这是一个开始。