В данный момент я использую магию, чтобы получить текущую версию git в своих сборках scons .. Я просто собираю версию и вставляю ее в 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} )