Не уверен, почему это не работает … следующий скрипт cmake хорошо работает на Windows:
exec_program(hg ${${PROJECT_NAME}_HGREMOTEDIR}
ARGS "log" "-r" ${${PROJECT_NAME}_HG_HASH_CODE} "--template" "{latesttag}"OUTPUT_VARIABLE ${PROJECT_NAME}_HG_LAST_TAG)
который получает последний тег. Тем не менее, в Fedora 17, когда я пытаюсь запустить ${PROJECT_NAME}_HG_LAST_TAG
заканчивается пустым.
Моей первой мыслью было, что местоположение хранилища было как-то не так. Итак, я попытался запустить:
exec_program(hg ${${PROJECT_NAME}_HGREMOTEDIR}
ARGS "log" "-r" ${${PROJECT_NAME}_HG_HASH_CODE}
OUTPUT_VARIABLE ${PROJECT_NAME}_HG_LAST_TAG)
Это заполняет ${PROJECT_NAME}_HG_LAST_TAG
с:
changeset: 368:a7ab3c8aca83
branch: Integration
tag: tip
user: ******
date: Wed Dec 11 10:59:33 2013 -0500
summary: ******
тогда я подумал, что, возможно, «lasttag» не поддерживается. Но последний тег «работает» в терминале.
>hg log -r a7ab3c8aca83 --template "{latesttag}"2.0>
Поэтому мое последнее замечание состояло в том, что по какой-то причине команда —template делает это плохо. Поэтому я сделал шаблон без внешних данных
hg log -r a7ab3c8aca83 — шаблон foo
а затем в файле CMake
exec_program(hg ${${PROJECT_NAME}_HGREMOTEDIR}
ARGS "log" "-r" ${${PROJECT_NAME}_HG_HASH_CODE} "--template" "foo"OUTPUT_VARIABLE ${PROJECT_NAME}_HG_LAST_TAG)
а также ${PROJECT_NAME}_HG_LAST_TAG
все еще пусто Что вызвало бы это? Есть ли работа вокруг?
Похоже на ошибку в CMake: выходная переменная не будет добавлять части потока, которые не заканчиваются новой строкой.
exec_program (кошачий тест ARGS OUTPUT_VARIABLE TEST_VAR)
если тест не заканчивается новой строкой, TEST_VAR не заполняется, несмотря на допустимый вывод в терминале оболочки.
Если тест заканчивается в новой строке, то вывод заполнен.
Исправление, в моем случае, состоит в том, чтобы изменить шаблон, чтобы включить новую строку:
exec_program(hg ${${PROJECT_NAME}_HGREMOTEDIR}
ARGS "log" "-r" ${${PROJECT_NAME}_HG_HASH_CODE} "--template" "\"{latesttag}\\n\""OUTPUT_VARIABLE ${PROJECT_NAME}_HG_LAST_TAG)
И тогда код работает (как в Windows, так и в Linux).
Других решений пока нет …