Попробуйте Iconv
1.9.3p194 :001 > require 'iconv'
# => true
1.9.3p194 :002 > string = "testing\xC2 a non UTF-8 string"
# => "testing\xC2 a non UTF-8 string"
1.9.3p194 :003 > ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
# => #<Iconv:0x000000026c9290>
1.9.3p194 :004 > ic.iconv string
# => "testing a non UTF-8 string"
$ <
оценивается как первое «предварительное условие» в правиле make, а $ @
оценивается как «цель» в правиле make.
Вот пример:
file.o : file.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
В этом случае $ <
будет заменен на file.c
, а $ @
будет file.o
.
Они более полезны в общих правилах, подобных этому:
%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
См. это руководство для получения дополнительной информации.
$ @
- цель текущего правила.
$ <
- это имя первой предпосылки («источник») текущего правила.
Так, например:
.c.o:
$(CC) -c $(CFLAGS) -o $@ $<
Это будет расширено до команды примерно такого вида:
gcc -c -Wall -o foo.o foo.c
См. Также GNU make manual § 10.5.3, «Автоматические переменные» .