2016-07-06 9 views
2

c/C++のmacro__FILE__には、コンパイルされた場所からファイルへのパスが含まれています。たとえば :グラデーションを使用したマクロ__FILE__の奇妙な動作

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

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

しかし、私はGradleのでコンパイルしようとすると、それはのように私のファイルへの出力のフルパスを、:

home/usr/myFolder/test.c. 

私はmacro__FILE__をプリコンパイルする場合にのみ内部プロジェクトパスが含まれてではなく、フル。

のGradleファイル:

apply plugin: 'c' 

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

test.cの:

#include <stdio.h> 

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

答えて

0

__FILE__の挙動は明確である:それは形で、現在の入力ファイルの名前に展開されるマクロですCの文字列定数の。

これは、プリプロセッサがファイルを開くために使用するパスです。

あなたが全体のパスを取得するという事実が予想されます。

3

残念ながら、どのようにgradleがコンパイラを呼び出すかによって、これが予想されます。あなただけの相対プロジェクトパスを取得したい場合は、

#include <stdio.h> 

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

ような何かをして、適切なを追加することができます(gradle documentation on how to add definesを参照)file("./").absolutePath.lengthPROJECT_PATH_LENの定義。

関連する問題