0

多年来我一直使用简单的 makefile,但直到最近才被分配学习大量复杂的 Autotools 生成的 makefile 的来龙去脉,这些 makefile 用于我的雇主购买的代码库。在这些中,我遇到了如下的变量声明:

QOBJECT_MOCSRCS = $(QOBJECT_HEADER:%.h=.gen/moc_%.cpp) \
                  $(QOBJECT_SRCS:%.cpp=.gen/moc_%.cpp)

QOBJECT_DEPS = $(QOBJECT_MOCSRCS:%.cpp=.deps/%.Po)

我从上下文中最好的猜测是,这些设置的文件名列表将由构建过程提供,例如,QOBJECT_MOCSRCS 最终应该作为 (a) .h 文件,(b) .cpp 文件的列表,基于将在构建期间生成的一组中间 .cpp 文件的 % 词干名称,位于临时目录 ./gen 中。这用于存储 moc_%.cpp 文件,这些文件是使用 Qt 的 moc 工具构建 Qt 文件而输出的……让我发疯的是,我在任何make中都找不到任何东西我拥有的文档(主要是 GNU make 手册)告诉我这种声明风格被称为什么,所以我可以追踪它并掌握语法。$() 的内容看起来有点像规则,GNU make 手册中最接近的等价物似乎是指定目标特定变量值的规则,但我不知道这是否接近正确的读数。任何人都可以为我指出一个合适的学习参考吗?

4

1 回答 1

1

此功能称为替换引用,http://www.gnu.org/software/make/manual/html_node/Substitution-Refs.html#Substitution-Refs

于 2013-05-09T22:19:47.957 回答