2014-04-24 4 views
0

Scons에 내 컴파일러에서 지원하는 옵션 (예 : -fcilkplus)을 확인하고 싶습니다. 실패하면, 나는 두 가지 옵션 추가를 제거해야 지금컴파일러 옵션에 대한 Scons 검사

def CheckCilkPlusCompiler(context): 
    test = """ 
    #include <cilk/cilk.h> 
    #include <assert.h> 
    int fib(int n) { 
     if (n < 2) return n; 
     int a = cilk_spawn fib(n-1); 
     int b = fib(n-2); 
     cilk_sync; 
     return a + b; 
    } 
    int main() { 
     int result = fib(30); 
     assert(result == 832040); 
     return 0; 
    } 
    """ 
    context.Message('Checking Cilk++ compiler ... ') 
    result = context.TryRun(test, '.cpp') 
    context.Result(result[0]) 
    return result[0] 

: 그럼 난 실행 내 사용자 지정 검사

env.Prepend(CXXFLAGS = ['-fcilkplus'], LIBS = ['cilkrts']) 

: 나는 그것을 관리 할 수있는 유일한 방법은 작업의 다음과 같은 순서입니다 환경 변수에서 플래그 cilkrts. 그렇게 할 수있는 더 좋은 방법이 있습니까?

문제는 컨텍스트에서 env에 액세스 할 수 없으므로 이므로 복제 할 수 없습니다.

답변

0

다음과 같이 check the availability of a library with SCons를 사용할 수 있습니다

env = Environment() 
conf = Configure(env) 
if not conf.CheckLib('cilkrts'): 
    print 'Did not find libcilkrts.a, exiting!' 
    Exit(1) 
else: 
    env.Prepend(CXXFLAGS = ['-fcilkplus'], LIBS = ['cilkrts']) 

env = conf.Finish() 

당신은 다음과 또한 check the availability of a header 수 있기 :

env = Environment() 
conf = Configure(env) 
if conf.CheckCHeader('cilk/cilk.h'): 
    env.Prepend(CXXFLAGS = ['-fcilkplus'], LIBS = ['cilkrts']) 
env = conf.Finish() 

업데이트 :

난 그냥 실현

, 당신은 구성에 환경에 액세스 할 수 있습니다 다음과 같은 객체 :

conf.env.Append(...) 
+0

고마워요.하지만이 모든 것을 이미 알고 있습니다. 제 질문은 컴파일러 옵션 *을 확인하는 것입니다. '-fcilkplus '는 유스 케이스 일 뿐이다. 나는 그것을 명확하게하기 위해 나의 질문을 편집했다. – hivert