2011-02-09 2 views
2

현재 스킨 빌드에 현재 git 리비전을 가져 오기 위해 마술을 사용 중입니다. 버전 CPPDEFINES에 스틱을 추가하기 만하면됩니다. 버전이 바뀌고 scons가 모든 파일을 변경하기 전까지는 변경된 파일이 아닌 모든 것을 다시 작성하기까지는 아주 잘 작동합니다. 모든 파일 사용에 대한 정의가 변경 되었기 때문에.빌드 빌드 버전을 스콘 빌드에 추가하는 방법

이상적으로는 git_version.cpp이라는 사용자 정의 빌더를 사용하여 파일을 생성하고 은 올바른 태그를 리턴하는 함수를 가지고 있습니다. 그런 식으로 하나의 파일 만 다시 작성됩니다.

이제 정확히 어떻게하는지 보여주는 자습서를 보았을 것입니다. 그러나 그것을 추적 할 수는 없습니다. 그리고

그래서 어떤 포인터를 감상 할 수있다

...

어쨌든 단지 참조 할 수 있도록이 내가 현재 뭘하는지는 ... 사용자 정의 빌더 SCons는에 조금 이상한 물건을 찾을 수 :

# Lets get the version from git 
# first get the base version 
git_sha = subprocess.Popen(["git","rev-parse","--short=10","HEAD"], stdout=subprocess.PIPE).communicate()[0].strip() 
p1 = subprocess.Popen(["git", "status"], stdout=subprocess.PIPE) 
p2 = subprocess.Popen(["grep", "Changed but not updated\\|Changes to be committed"], stdin=p1.stdout,stdout=subprocess.PIPE) 
result = p2.communicate()[0].strip() 

if result!="": 
    git_sha += "[MOD]" 

print "Building version %s"%git_sha 

env = Environment() 
env.Append(CPPDEFINES={'GITSHAMOD':'"\\"%s\\""'%git_sha}) 

답변

4

하나의 파일이기 때문에 사용자 지정 작성기가 필요하지 않습니다. 대상 버전 파일에 첨부 된 기능을 사용하여 버전 파일을 생성 할 수 있습니다. 아래의 예제 코드에서는 이미 버전을 계산하여 환경 변수에 넣었습니다. 동일한 작업을 수행하거나 version_action 함수에서 git 호출을 작성하는 코드를 넣을 수 있습니다.

version_build_template="""/* 
* This file is automatically generated by the build process 
* DO NOT EDIT! 
*/ 

const char VERSION_STRING[] = "%s"; 

const char* getVersionString() { return VERSION_STRING; } 
""" 

def version_action(target, source, env): 
    """ 
    Generate the version file with the current version in it 
    """ 
    contents = version_build_template % (env['VERSION'].toString()) 
    fd = open(target[0].path, 'w') 
    fd.write(contents) 
    fd.close() 
    return 0 

build_version = env.Command('version.build.cpp', [], Action(version_action)) 
env.AlwaysBuild(build_version) 
관련 문제