$$ @在makefile中意味着什么?

时间:2014-01-03 16:00:30

标签: 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.

有没有人认识到这个$$ @变量?我在任何地方都找不到任何参考。

谢谢!

2 个答案:

答案 0 :(得分:2)

此规则必须位于标有

的部分
.SECONDEXPANSION:

第一个$在第一个传递中展开,产生$@.o,然后第二个传递像往常一样产生program.o

这是一个GNU make功能。你应该确保在目标上使用GNU make(而不是其他)并且它是最新的。您可以使用

执行此操作
make --version

版本4可用,但3.8x应该没问题。

相关文档为here

答案 1 :(得分:2)

如果你的make支持$$ @,那么$$ @只会评估在这个makefile的这一行编程。

$$ @可以与DEPENDENCY(非命令)行上的目标名称相同。从这个意义上说,你拥有的makefile是正确的($$ @就在它所应该的行上)。所有制作程序都不支持$$ @。

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

$ @只能在命令行上使用

target:dependency1 dependency2

command1>> $ @

$$ @只能在依赖行中使用,如:

docmk:$$ @。c

评估:

docmk:docmk.c