仅用于快速术语:
#basic makefile rule
target: dependencies
recipe
问题:我希望自动生成依赖关系。
例如,我希望将以下内容转换为:
#one of my targets
file.o: file.cpp 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
$(COMPILE)
转换为:
#one of my targets
file.o: $(GENERATE)
$(COMPILE)
我不太确定是否可能。
我知道的是:
我可以使用这个编译器标记:
g++ -MM file.cpp
它将返回正确的目标和依赖项。
因此,从示例中,它将返回:
file.o: file.cpp 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
然而,“make”不允许我在规则的目标或依赖项部分明确编写shell代码:(
我知道有一个名为shell的“make”函数,但我无法将其作为依赖项插入并进行解析,因为它依赖于代表目标的宏$@..或者至少我认为问题就在这里。 我甚至尝试用这个makefile函数替换“file.cpp”依赖项,但也不起作用。
#it's suppose to turn the $@ (file.o) into file.cpp
THE_CPP := $(addsuffix $(.cpp),$(basename $@))
#one of my targets
file.o: $(THE_CPP) 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
$(COMPILE)
#this does not work
在谷歌上,似乎有两种解决方案。但我都不完全理解。
来自GNU Make手册
所以我的最终问题是:是否可能按照我想要的方式进行操作,
如果不行,能否有人从这些网站中分解代码并详细解释它们的工作原理。如果必须,我会实现其中一种方法,但在理解之前,我不想只是将一大块代码粘贴到我的makefile中。