Связывание библиотек с проектом QT с использованием вывода pkg-config

Это немного вопрос новичка. Я пытаюсь добавить библиотеки OpenCV в проект QT.

В этом вопросе говорится, что флаги ссылок задаются

pkg-config --libs opencv

Если я вставлю вывод командной строки в файл проекта, например:

LIBS += -L/usr/local/lib -lml -lcvaux -lhighgui -lcv -lcxcore

тогда все компилируется нормально, но теперь это не переносимо. Как я могу просто ссылаться на вывод команды?

Обновление: попробовал предложение Кена Блума, но оно не скомпилируется. Фактические сгенерированные команды компилятора:

# How it should be, at least on my machine
g++ -o QOpenCVTest main.o qopencvtest.o moc_qopencvtest.o -L/usr/lib -L/usr/local/lib -lml -lcvaux -lhighgui -lcv -lcxcore -lQtGui -lQtCore -lpthread

# with CONFIG and PKGCONFIG
g++ -o QOpenCVTest main.o qopencvtest.o moc_qopencvtest.o -L/usr/lib -lQtGui -lQtCore -lpthread

person MVG    schedule 19.08.2010    source источник
comment
Какая у вас версия qt и qmake? Предложения Кена должны работать, но я не уверен, в какой версии qt они были добавлены. Кроме того, не могли бы вы опубликовать свой полный файл pro, так как также могут быть ошибки, вызывающие проблемы, которые вы видите.   -  person rasjani    schedule 21.08.2010


Ответы (5)


CONFIG += link_pkgconfig
PKGCONFIG += opencv

(Я получил этот ответ от http://beaufour.dk/blog/2008/02/using-pkgconfig.html)

person Ken Bloom    schedule 19.08.2010
comment
Я думаю, что это правильно, но это не совсем работает. Я обновлю вопрос. - person MVG; 19.08.2010
comment
Может быть, сайт, с которого я взял это, был неправильным. Я не проверял это на себе. - person Ken Bloom; 19.08.2010
comment
Он должен работать нормально, по крайней мере, на 4,6 кварты (где я тестировал и все еще использую это). Единственная проблема заключается в том, что если эта библиотека opencv установлена ​​после того, как qmake один раз создал make-файл (и make-файл все еще существует), запуск make или даже самого qmake не заставит вещи работать волшебным образом. Итак, make distclean && qmake и новый makefile должны быть созданы с соответствующими библиотеками для компиляции. - person rasjani; 21.08.2010
comment
@rasjani: Спасибо. В большинстве случаев я просто хорошо гуглю. Спасибо за информацию. - person Ken Bloom; 22.08.2010
comment
Если есть ответ opencv development package not found @SteveEng, он решил это! - person JustWe; 17.05.2019
comment
если не получится, попробуйте добавить QT_CONFIG -= no-pkg-config - person Minh Nghĩa; 25.07.2019

Ответ Кена сработал отлично. Мне просто нужно было сначала удалить пробелы по обе стороны от +=.

CONFIG+=link_pkgconfig PKGCONFIG+=opencv
person Salida Software    schedule 27.10.2010
comment
Для Mac с opencv, установленным через macports, используйте: LIBS+=/opt/local/lib/libcxcore.dylib LIBS+=/opt/local/lib/libcvaux.dylib LIBS+=/opt/local/lib/libcv.dylib LIBS+=/opt /local/lib/libhighgui.dylib LIBS+=/opt/local/lib/libml.dylib - person Salida Software; 24.11.2010

В более новой версии Qt это необходимо сделать, чтобы избежать ошибки package not found:

QT_CONFIG -= no-pkg-config
CONFIG += link_pkgconfig
PKGCONFIG += protobuf #or whatever package here

Также пришлось сделать это для Mac:

mac {
  PKG_CONFIG = /usr/local/bin/pkg-config
}
person SteveEng    schedule 17.10.2017
comment
Спасибо. Оно работает!! Лучше ли переместить QT_CONFIG, CONFIG, PKGCONFIG в раздел mac {} для кросс-компиляции? - person Hongsoog; 10.06.2020

Что-то подобное в вашем файле qmake должно делать

LIBS += `pkg-config --libs opencv`

Редактировать: Хм, ответ Кена Блума может быть более портативным, но не задокументирован?

person nicomen    schedule 19.08.2010
comment
Вызов простого pkg-config прерывает кросс-компиляцию. Пожалуйста, избегайте прямого вызова pkg-config. - person Helmut Grohne; 21.12.2018

Добавьте следующие строки в ваш файл .pro:

INCLUDEPATH += `pkg-config --cflags opencv`
LIBS += `pkg-config --libs opencv`
person RawMean    schedule 20.08.2012
comment
Вызов простого pkg-config прерывает кросс-компиляцию. Пожалуйста, избегайте прямого вызова pkg-config. - person Helmut Grohne; 21.12.2018