我有使用过rake(一个Ruby编写的make工具),它有一个选项可以获取所有可用目标的列表,例如:
> rake --tasks
rake db:charset # retrieve the charset for your data...
rake db:collation # retrieve the collation for your da...
rake db:create # Creates the databases defined in y...
rake db:drop # Drops the database for your curren...
...
但是在GNU make中似乎没有这样的选项。
显然,截至2007年,这个功能已经非常接近了 - http://www.mail-archive.com/help-make@gnu.org/msg06434.html。
无论如何,我做了一个小技巧来从makefile中提取目标,你可以在makefile中包含它。
list:
@grep '^[^#[:space:]].*:' Makefile
它会给你一个已定义目标的列表,但这只是个开端 - 比如它并没有过滤依赖关系。> make list
list:
copy:
run:
plot:
turnin:
alias makefile-targets='grep "^[^#[:space:]].*:" Makefile'
我通常只需要检查当前的makefile,然后bash自动完成会展开我的别名。 - RockyRoadgrep : Makefile
是不是太过简单了? - cibercitizen1Makefile
,这个方法是可行的,但在更复杂的文件中,你的命令将包括特殊目标,如.PHONY
,包含 URL 的行,使用:=
定义变量的行,定义目标特定变量的行等等。 - FWDekker