2016-07-06 3 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의 정의에 추가 할 수 있습니다.