我正在将一个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.
有没有人认识到这个$$ @变量?我在任何地方都找不到任何参考。
谢谢!
答案 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