2015-07-06 56 views
4

如果我有其他文件需要的文件,是否可以获取需要它的文件的绝对路径?在编译时获取导入文件的文件路径

因此,如果lib_file.cr有一个意思是由导入它的app_file.cr调用的宏,该宏是否可以在编译时发现文件路径为app_file.cr

我尝试这样的东西:

macro tester 
    puts __DIR__ 
    puts __FILE__ 
end 

但是从文件执行需要被调用时,它在编译时给出了什么,这在运行时:

 
? 
expanded macro: app_file 

如果我改变宏对此:

macro tester 
    {{puts __DIR__}} 
    {{puts __FILE__}} 
end 

它在编译时给我这个:

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

那么在编译时里面有app_file.cr的全路径吗?

+1

我也试图把'放__FILE__'在一个单独的文件,并使用'{{运行(......)。字符串化}}',但给我的路径单独的文件。 –

回答

6

您可以使用默认参数__FILE__来获取调用宏的文件。

macro tester(file = __FILE__) 
    {{puts file}} # Print at compile time 
    puts {{file}} # Print at runtime 
end 
+1

你也有'__LINE__',所以你可以得到宏调用的地方。我在https://gist.github.com/bcardiff/740e8c1f7c7fbc456bb0使用。然而,AFAIK可以在不使用宏的情况下知道需要lib的文件,这是您的原始问题。 –

+1

谢谢,它看起来很有希望,但它给了我'未定义的局部变量或方法'文件'。我会进一步调查。 –

+1

......是的,它需要'{{放置文件}}'。似乎完美地工作。谢谢! –