Почему мой скрипт компиляции Qt не работает на macOS? - PullRequest
0 голосов
/ 06 февраля 2020

Я только начал изучать Qt несколько дней go. Вот мой Hello World:

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QLabel label( QLabel::tr("Hello Qt!") );
    label.show();

    return a.exec();
}

Чтобы скомпилировать его без Qt Creator, я написал короткий скрипт компиляции:

#!/bin/bash
filename="$(pwd | awk -F "/" '    {print $NF}')" # get name of current directory
qmake -project
qmake $filename.pro
echo 'QT += core gui widgets' >> $filename.pro
make
open $filename.app

, но скрипт не работает:

/Library/Developer/CommandLineTools/usr/bin/clang++ -stdlib=libc++ -headerpad_max_install_names  -arch x86_64 -Wl,-syslibroot,/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -mmacosx-version-min=10.12 -Wl,-rpath,@executable_path/../Frameworks -o qttest.app/Contents/MacOS/qttest helloqt.o   -F/usr/local/Cellar/qt/5.13.2/lib -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL
Undefined symbols for architecture x86_64:
  "QApplication::exec()", referenced from:
      _main in helloqt.o
  "QApplication::QApplication(int&, char**, int)", referenced from:
      _main in helloqt.o
  "QApplication::~QApplication()", referenced from:
      _main in helloqt.o
  "QLabel::staticMetaObject", referenced from:
      _main in helloqt.o
  "QLabel::QLabel(QString const&, QWidget*, QFlags<Qt::WindowType>)", referenced from:
      _main in helloqt.o
  "QLabel::~QLabel()", referenced from:
      _main in helloqt.o
  "QWidget::show()", referenced from:
      _main in helloqt.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [qttest.app/Contents/MacOS/qttest] Error 1
The application cannot be opened because its executable is missing.

однако, если я запускаю команды отдельно , это сработает, и make не выдаст никаких ошибок.

Почему это? Что я должен сделать, чтобы скрипт работал?

1 Ответ

0 голосов
/ 06 февраля 2020

Очевидно, что здесь есть проблема со связью.

Случайное предположение: в вашей оболочке вы добавляете QT += core gui widgets к *.pro (который используется для связывания библиотеки, я думаю) после qmake это. Так что, возможно, это не правильно? Не могли бы вы попробовать поставить qmake $filename.pro после echo ... > $filename.pro?

Вы оболочка:

#!/bin/bash
filename="$(pwd | awk -F "/" '    {print $NF}')" # get name of current directory
qmake -project
qmake $filename.pro # anchor A
echo 'QT += core gui widgets' >> $filename.pro # anchor B
# try exchange A and B?
make
open $filename.app
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...