Linux exec программа не получает выводимые значения

Не уверен, почему это не работает … следующий скрипт 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 все еще пусто Что вызвало бы это? Есть ли работа вокруг?

0

Решение

Похоже на ошибку в 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).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]