$$@在makefile中是什么意思?

$$@在makefile中是什么意思?,makefile,Makefile,我正在将一个makefile从AIX移植到Linux—这一行有问题: program.o : header1.h header2.h program : $$@.o lib1.a lib2.a lib3.a 错误是: make: *** No rule to make target `$@.o', needed by `program'. Stop. 是否有人识别此$$@变量?我在任何地方都找不到它的任何参考资料 谢谢 此规则必须位于标记为 .SECONDEXPANSION: 第一个$在

我正在将一个makefile从AIX移植到Linux—这一行有问题:

program.o : header1.h header2.h
program : $$@.o lib1.a lib2.a lib3.a
错误是:

make: *** No rule to make target `$@.o', needed by `program'.  Stop.
是否有人识别此$$@变量?我在任何地方都找不到它的任何参考资料


谢谢

此规则必须位于标记为

.SECONDEXPANSION:
第一个
$
在第一个过程中展开,生成
$@.o
,然后第二个过程像往常一样生成
program.o

这是一个GNU制造特性。您应该确保GNU make(而不是其他)正在目标上使用,并且它是最新的。你可以用它来做这个

make --version
版本4可用,但3.8x应该可以


相关文档为。

此规则必须位于标记为

.SECONDEXPANSION:
第一个
$
在第一个过程中展开,生成
$@.o
,然后第二个过程像往常一样生成
program.o

这是一个GNU制造特性。您应该确保GNU make(而不是其他)正在目标上使用,并且它是最新的。你可以用它来做这个

make --version
版本4可用,但3.8x应该可以


相关文档是。

如果make支持$$@,则$$$@将仅计算为在此makefile的这一行上编程

$$@可以与依赖项(而不是命令)行上的目标名称相同。从这个意义上讲,您拥有的makefile是正确的($$@位于它应该位于的行上)。$$@并非所有make程序都支持

根据我使用的“使用Make管理项目”一书,$$@的意思与目标名称$@相同,但$$@和$@在makefile中的不同位置使用:

$@只能在命令行上使用

目标:依赖1依赖2

命令1>>$@

$$@只能在依赖项行上使用,如中所示:

docmk:$$@.c

评估结果为:


docmk:docmk.c

如果make支持$$@,则$$@将计算为在该makefile的这一行上编程

$$@可以与依赖项(而不是命令)行上的目标名称相同。从这个意义上讲,您拥有的makefile是正确的($$@位于它应该位于的行上)。$$@并非所有make程序都支持

根据我使用的“使用Make管理项目”一书,$$@的意思与目标名称$@相同,但$$@和$@在makefile中的不同位置使用:

$@只能在命令行上使用

目标:依赖1依赖2

命令1>>$@

$$@只能在依赖项行上使用,如中所示:

docmk:$$@.c

评估结果为:


docmk:docmk.c

我找到了它的文档。我以前从未使用过这个功能,所以我不能告诉你更多。太棒了,谢谢-我会阅读的。是的。这要么是H2CO3所指出的错误,要么是试图使用WumpusQ.Wumbley所指出的辅助扩展。我刚刚注意到,您的做法与我的想法相反——从AIX到Linux。这个
$$@
似乎是一个GNU扩展,所以我希望它主要用于Linux,所有的移植问题都是相反的direction@H2CO3:作为
$@
,它没有意义,因为该变量在prereq列表中不可用。(我的意思是,作者可能有意
$@
,输入了一个错误,但这是假设了很多。)二次扩展似乎是最有可能的解释。我找到了相关文档。我以前从未使用过这个功能,所以我不能告诉你更多。太棒了,谢谢-我会阅读的。是的。这要么是H2CO3所指出的错误,要么是试图使用WumpusQ.Wumbley所指出的辅助扩展。我刚刚注意到,您的做法与我的想法相反——从AIX到Linux。这个
$$@
似乎是一个GNU扩展,所以我希望它主要用于Linux,所有的移植问题都是相反的direction@H2CO3:作为
$@
,它没有意义,因为该变量在prereq列表中不可用。(我的意思是,作者可能有意$@,打字错误,但这是假设了很多。)二次扩展似乎是最可能的解释。