带有gradle的宏__FILE__的奇怪行为

时间:2016-07-06 08:36:10

标签: c gradle

如您所知,c / c ++中的macro__FILE__包含文件的路径,从中编译它。 例如:

$COMMAND

但是当我尝试使用gradle进行编译时,它会输出我文件的完整路径,例如:

java -version

我想预编译macro__FILE__只包含内部项目路径但不完整。

Gradle文件:

gcc test.c -o test
./test
test.c

gcc myFolder/test.c -o test
./test
myFolder/test.c

test.c的:

home/usr/myFolder/test.c.

2 个答案:

答案 0 :(得分:3)

不幸的是,由于gradle如何调用编译器,这是预期的。如果您只想获得相对项目路径,可以执行类似

的操作
#include <stdio.h>

void main(void)
{
    printf("%s\n", __FILE__ + PROJECT_PATH_LEN);
}

然后将PROJECT_PATH_LEN的适当定义添加到file("./").absolutePath.length(请参阅gradle documentation on how to add defines)。

答案 1 :(得分:0)

__FILE__的行为很明确:它是一个宏,它以C字符串常量的形式扩展为当前输入文件的名称。

这是预处理器用来打开文件的路径。

你得到了整条道路的事实。