2015-04-08 5 views
0

Я пытаюсь определить версию библиотеки в qmake и на основе этого набора препроцессорной переменной. Я получаю номер версии (десятичное число), используя pkg-config, и хотел бы сравнить его с минимальной версией. Я могу использовать bc в сценарии оболочки для сравнения с плавающей запятой, но не могу заставить его работать с помощью $$ системы в qmake.Сравнение с плавающей запятой в qmake

LIBSTATGRAB_OLDAPI = $$system(echo "`pkg-config --modversion libstatgrab ` < 0.90 " | bc) 
equals(LIBSTATGRAB_OLDAPI,"1") { 
    message("Using old libstatgrab API") 
    DEFINES += LIBSTATGRAB_OLD 
} 

Проблема заключается в том, что командная оболочка управляет $$ системы, кажется, интерпретировать < символ в кавычках как ReadFile команды и не конвейеру весь цитируемый блок до н.

sh: 1: cannot open 0.90: No such file 

Как я могу обойти это?

ответ

1

Использование bc для этого ненадежно, если номер версии имеет более одного разделителя, например. 0.90.1. Мое решение использует sort:

LIBSTATGRAB_OLDAPI = $$system(echo "`pkg-config --modversion libstatgrab` \\\\n 0.90" | sort -VbC; echo $?) 

Объяснение

sort пытается проверить, например, 0.95 \n 0.90 является несортированным, если он существует с кодом 1.

\n сбежал с четырьмя обратными косыми чертами, это требование qmake. \n также окружен пространствами для удобства чтения, sort -b заботится о пробелах.

sort -V - предназначен для сортировки версия

sort -b - игнорирует пробельные

sort -C - бесшумная проверка, нам нужен только код выхода

echo $? - выводит код выхода

+0

Спасибо за хороший предложение! Он не работал с пробелами вокруг \\\\ n, и я изменил его на «0.90 \\\\ n'pkg-config --modversion libstatgrab'», чтобы проверить версию <0.90 вместо 0.90 user3293204