Получить номер ревизии в VS с помощью qmake - PullRequest
4 голосов
/ 08 октября 2009

Мой текущий рабочий процесс:

  1. hg update (или любой другой, используемый для проверки ревизии)
  2. MyProject.proqmakeMyProject.vcproj
  3. Открыть Visual Studio, редактировать файлы
  4. Сборка проекта

На этапе сборки, как я могу обновить мой заголовочный файл config.h информацией из системы контроля версий (например, hg id)?

MyProject.vcproj генерируется qmake, поэтому я не должен редактировать его вручную.

Ответы [ 4 ]

4 голосов
/ 10 октября 2009

Это можно сделать с помощью пользовательской цели сборки и ключевого слова PRE_TARGETDEPS. Предполагая, что config.h.in имеет следующий формат:

#define HGID $HGID

Вы можете определить пользовательскую цель сборки, которая будет обрабатывать hgid.h.in и выводить до hgid.h до построения вашей основной цели следующим образом:

hgid.target = hgid
hgid.commands = sed s/\\\$$HGID/`hg id`/ hgid.h.in > hgid.h
QMAKE_EXTRA_TARGETS += hgid
PRE_TARGETDEPS += hgid
4 голосов
/ 08 октября 2009

Вы можете выполнять внешние команды изнутри qmake. Самый простой способ сделать информацию доступной в ваших источниках - это использовать определение:

HGID = $$system(hg id)
DEFINES += HGID=\\\"$$HGID\\\"

Я не уверен, что вы можете редактировать внешний файл из qmake. Вы можете использовать внешний инструмент, но в Windows у вас обычно нет таких вещей, как sed, поэтому это может быть немного более проблематично.

1 голос
/ 05 июля 2010

В дополнение к комментариям Лукаша Лалинского и Goodrone, я хотел бы отметить, что qmake может ссылаться непосредственно на скрипт, а не только на его вывод. Так что можно сказать

DEFINES += REPO_ID=\\\"`./setlocalversion.sh`\\\"

и скрипт будет заново выполняться для каждой цели.

1 голос
/ 09 октября 2009

Один из вариантов - включить Расширение ключевого слова . Поместите что-то вроде этого в свой hgrc (или Mercurial.ini, если это ваша вещь):

[extensions]
hgext.keyword=

[keyword]
config.h =

[keywordmaps]
HGREV = {node}

Тогда в config.h поставь:

#define HGREV "$HGREV$"

Возможно, вам потребуется проанализировать шестнадцатеричное значение из "$ HGREV: deadbeefdeadbeef $", которое вы получите, но это легко сделать с помощью любого кода, обращающегося к определению HGREV.

...