在编译时获取导入文件的文件路径

Lye*_*ish 4 crystal-lang

如果我有一个其他文件需要的文件,是否可以获取需要它的文件的绝对文件路径?

因此,如果lib_file.cr有一个宏被意图由app_file.cr导入它调用,那宏可以app_file.cr在编译时发现文件路径吗?

我试过这样的东西:

macro tester
  puts __DIR__
  puts __FILE__
end
Run Code Online (Sandbox Code Playgroud)

但是当从执行需求的文件调用时,它在编译时没有提供任何内容,而这在运行时:

?
expanded macro: app_file

如果我将宏更改为:

macro tester
  {{puts __DIR__}}
  {{puts __FILE__}}
end
Run Code Online (Sandbox Code Playgroud)

它在编译时给我这个:

"/home/user/Documents/crystal_test/lib_file"
"/home/user/Documents/crystal_test/lib_file.cr"

那么有一个技巧可以在编译时获得app_file.cr内部的完整路径lib_file.cr吗?

Bri*_*iff 6

您可以使用默认args __FILE__来获取调用宏的文件.

macro tester(file = __FILE__)
  {{puts file}} # Print at compile time
  puts {{file}} # Print at runtime
end
Run Code Online (Sandbox Code Playgroud)