[英]What are the braces in this makefile rule for?
我正在阅读 Qt 创建的项目的 makefile,该项目具有以下内容:
{backend}.cpp{release\}.obj::
$(CXX) -c $(CXXFLAGS) $(INCPATH) -Forelease\ @<<
$<
<<
(上面的代码使用 \\t 作为配方,并且是在 makefile 中编写的)
规则和食谱都让我感到困惑。
我将从规则中的{backend}
开始。 显然{release}
也有同样的困惑。 我假设这是对名为backend
的特定子目录的引用。 我猜..\\backend\\release\\bar.obj
会被发现为合法目标? 但是make 的哪一部分说这是合法的语法,这里到底发生了什么?
FWIW:这是在注释为: ##### implicit rules
。 版本: GNU Make 4.2.1 Built for x86_64-unknown-cygwin
奖励积分:
解释@<<
和<<
在配方中的使用......(是的,我缺乏 bash shell 技巧...... )。 这是用$<
引用第一个先决条件并静默重定向它吗? 为什么不是$$<
?
谢谢。
这是 NMAKE 批处理模式规则
https://docs.microsoft.com/en-us/cpp/build/batch-mode-rules?view=vs-2017
等效的 GNU Make 规则类似于
backend/%.obj: release/%.cpp:
不同之处在于,顾名思义,这些规则只会为所有有效目标调用一次他们的配方,并期望规则使用$<
宏在一次传递中创建所有目标。
<<
语法是 NMAKE 的内联文件功能
https://docs.microsoft.com/en-us/cpp/build/inline-files-in-a-makefile?view=vs-2017
这将扩展并捕获尖括号之间的所有内容并将其保存到一个文件中,在这种情况下是一个临时文件,因为在括号后没有指定文件名。 然后该文件通过@
选项作为配方第一行的响应文件传递给编译器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.