繁体   English   中英

这个 makefile 规则中的大括号是做什么用的?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM