C 带有gradle的宏_文件_的奇怪行为
正如您所知,c/c++中的宏文件包含一个指向文件的路径,文件是从那里编译的。 例如: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 {
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”,文件+项目路径);
}
然后在文件(“./”)中添加适当的项目路径长度定义(请参阅)