C 带有gradle的宏_文件_的奇怪行为

C 带有gradle的宏_文件_的奇怪行为,c,gradle,C,Gradle,正如您所知,c/c++中的宏文件包含一个指向文件的路径,文件是从那里编译的。 例如: gcc test.c -o test ./test test.c gcc myFolder/test.c -o test ./test myFolder/test.c 但当我尝试使用gradle编译时,它会输出文件的完整路径,如: home/usr/myFolder/test.c. 我希望预编译宏文件只包含内部项目路径,但不包含完整路径 渐变文件: apply plugin: 'c' model {

正如您所知,c/c++中的宏文件包含一个指向文件的路径,文件是从那里编译的。 例如:

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

gcc myFolder/test.c -o test
./test
myFolder/test.c
但当我尝试使用gradle编译时,它会输出文件的完整路径,如:

home/usr/myFolder/test.c.
我希望预编译宏文件只包含内部项目路径,但不包含完整路径

渐变文件:

apply plugin: 'c'

model {
    components {
            main(NativeExecutableSpec) {
                    sources {
                        c {
                            source {
                                srcDir "./"
                                include "*.c"
                            }
                        }
                    }
            }
    }
}
测试c:

#include <stdio.h>

void main(void)
{
    printf("%s\n", __FILE__);
}
#包括
真空总管(真空)
{
printf(“%s\n”,文件);
}

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

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


得到整个路径是意料之中的事。

不幸的是,由于gradle调用编译器的方式,这是意料之中的事。如果只想获得相对的项目路径,可以执行以下操作

#include <stdio.h>

void main(void)
{
    printf("%s\n", __FILE__ + PROJECT_PATH_LEN);
}
#包括
真空总管(真空)
{
printf(“%s\n”,文件+项目路径);
}
然后在
文件(“./”)中添加适当的
项目路径长度定义(请参阅)