qmake .pro файл не проанализирован правильно для генерации LD_LIBRARY_PATH - PullRequest
1 голос
/ 09 сентября 2011

В последние дни я пытался понять, как работает qmake и я застрял. Я хочу проект со следующей структурой:

корень

  • бен
    • testjson
  • Lib
    • libjson.so
  • ЦСИ
    • testjson.cpp

Все, что я хотел, это проверить библиотеку json. Я создал новый пустой проект в Qt Creator 2.3.0 и установил все параметры, чтобы исполняемый файл работал. Протестировал что хотел и закрыл приложение.

Позже, когда я снова открыл Qt Creator, я загрузил файл .pro и с удивлением, когда я пытаюсь запустить проект, я получаю это сообщение: «Не указан исполняемый файл». : | В этом случае я перешел на вкладку проекта и вручную выбрал исполняемый файл, но, как и ожидалось, при попытке запустить его я получил сообщение об ошибке «При загрузке общих библиотек: libjson.so: не могу открыть файл общего объекта: Нет такого» файл или каталог ". Это ожидалось, так как LD_LIBRARY_PATH не установлен (как будто я запустил его из cli).

Похоже, что .pro файл не анализируется должным образом, потому что в первый раз, на вкладке проекта, когда я выбирал вкладку Run, я видел сообщение: "Parsing .pro file", а затем запущенная конфигурация будет заполнен и выделен серым цветом, так что это означает, что LD_LIBRARY_PATH был добавлен Qt Creator после анализа файла .pro.

Теперь мой квест: почему файл .pro был проанализирован правильно с первого раза?

Вот файл .pro:

!include(../../common.pri){
    error(Couldn't find the common.pri file!)
}

TEMPLATE = app

SOURCES += testjson.cpp
CONFIG += console
TARGET = testjson

CONFIG(release, debug|release) {
    DESTDIR = $$BinaryDir/Release
} else {
    DESTDIR = $$BinaryDir/Debug
}

LIBS += -L$$LibraryDir -ljson

INCLUDEPATH += $$DefaultInclude
DEPENDPATH += $$LibraryDir

PS: Решение состоит в том, чтобы вручную добавить LD_LIBRARY_PATH в среду здания, но я считаю, что это не правильный способ сделать это.

1 Ответ

3 голосов
/ 13 сентября 2011

Я думаю, у вас есть путаница между тем, что контролируется файлом qmake (.pro), и тем, что контролируется вашей средой выполнения. Файл .pro указывает только среду BUILD, а не среду выполнения. Файл .pro используется только во время процесса сборки.

Когда вы запускаете встроенный код, будь то из командной строки или из Qt Creator, вы имеете дело со средой RUNTIME. Если вы попытались запустить программу из оболочки, вам нужно было бы конкретно указать LD_LIBRARY_PATH. Внутри Qt Creator вам придется сделать то же самое.

[У меня установлен только Qt Creator 2.2, но он должен быть очень похож на 2.3]

Чтобы установить среду выполнения,

  1. Выберите значок "Проекты" на левой панели инструментов.
  2. В верхней части выберите «Настройки запуска»
  3. На странице «Параметры запуска» перейдите к настройкам «Запустить среду» и нажмите «Подробно», чтобы отобразить сведения о среде.
  4. Нажмите «Добавить ...» и добавьте «LD_LIBRARY_PATH» с соответствующими настройками.

Когда вы закончите, настройки будут сохранены вместе с вашим проектом. [Настройки на самом деле хранятся в файле с окончанием «.user», а не в «.pro».]

Когда вы приступите к запуску своего проекта, будет использоваться среда, которую вы настроили в «Настройках запуска», и ваше приложение должно запуститься с правильным LD_LIBRARY_PATH.

...