Старый вопрос, но для дальнейшего использования: это известная ошибка в Visual Studio 2015, как объясняется в последнем сообщении (7 января 2016 года) в этой теме MSDN Social.
Обходной путь для вашего примера выглядит следующим образом (я использовал свой метод как бесплатную функцию для простоты):
#include
#include
#include
#include
#if _MSC_VER >= 1900
std::string utf16_to_utf8(std::u16string utf16_string)
{
std::wstring_convert, int16_t> convert;
auto p = reinterpret_cast(utf16_string.data());
return convert.to_bytes(p, p + utf16_string.size());
}
#else
std::string utf16_to_utf8(std::u16string utf16_string)
{
std::wstring_convert, char16_t> convert;
return convert.to_bytes(utf16_string);
}
#endif
int main()
{
std::cout << utf16_to_utf8(u"Élémentaire, mon cher Watson!") << std::endl;
return 0;
}
Надеемся, проблема будет исправлена в будущих выпусках, в противном случае #if
условие будет нуждаться в уточнении. UPDATE: нет, не зафиксировано в VS 2017. Поэтому я обновил препроцессор условным до >= 1900
(изначально был == 1900
).
Проблема в том, что export
экспортирует переменную в подоболочки, используемые командами; он недоступен для расширения в других заданиях. Так что не пытайтесь получить это из окружающей среды вне правил.
somevar := apple
export somevar
update1 := $(shell perl -e 'print "method 1 $$ENV{somevar}\n"')
# Make runs the shell command, the shell does not know somevar, so update1 is "method 1 ".
update2 := perl -e 'print "method 2 $$ENV{somevar}\n"'
# Now update2 is perl -e 'print "method 2 $$ENV{somevar}\n"'
# Lest we forget:
update3 := method 3 $(somevar)
all:
echo $(update1)
$(update2)
echo $(update3)
perl -e 'print method 4 "$$ENV{somevar}\n"'
Запуск make-файла
foo:=apple
export foo
all:
@echo ">"$(shell echo "$$foo")
@echo ">""$$foo"
дает мне (с неопределенным foo в среде)
$ make
>
>apple
$ make foo=bar
>
>apple
$ export foo=bar; make
>bar
>apple
$ export foo=bar; make foo=bar
>bar
>bar
Попробуйте использовать форму в кавычках ( update: = "v = $$ somevar"
) и позволить оболочке обрабатывать расширение при запуске команды (вам все равно понадобится экспорт)