Qt moc.exe не генерирует файл * .moc - PullRequest
5 голосов
/ 29 августа 2009

Я пытаюсь создать пример qtestlib / tutorial1 , но файл testqstring.moc не создается, когда я запускаю nmake (я использую Qt 4.5.2 в Windows XP SP3).
Я скопировал testqstring.cpp из каталога учебника в каталог сборки ( C: \ sandboxes \ testqstring ) и из командной строки Qt запустил файл vsvars32.bat из моей MS Visual Studio 8 установка для добавления переменных окружения VS.

Согласно учебнику, я должен запустить:

> qmake -project "CONFIG += qtestlib"
> qmake
> nmake

Когда я это сделаю, вывод из nmake будет:

C: /Apps/Qt/2009.03/qt/bin \ moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_TESTLIB_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_TH \ Apps \ QI \ QtCore "-I" .... \ Apps \ Qt \ 2009.03 \ qt \ include \ QtGui "-I" .... \ Apps \ Qt \ 2009.03 \ qt \ include \ QtTest "-I" .... \ Apps \ Qt \ 2009.03 \ qt \ include "-I". " -I ".... \ Apps \ Qt \ 2009.03 \ qt \ include \ ActiveQt" -I "debug" -I ".... \ Apps \ Qt \ 2009.03 \ qt \ mkspecs \ win32-g ++" -D__GNUC__ - DWIN32 testqstring.cpp -o debug \ testqstring.moc

г ++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_TESTLIB_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I ".... \ Apps \ Qt \ 2009.03 \ Qt \ включить \ QtCore" -I ".... \ Apps \ Qt \ 2009.03 \ qt \ include \ QtGui" -I ".... \ Apps \ Qt \ 2009.03 \ qt \ include \ QtTest" -I ".... \ Apps \ Qt \ 2009.03 \ qt \ include "-I". " -I ".... \ Apps \ Qt \ 2009.03 \ qt \ include \ ActiveQt" -I "debug" -I ".... \ Apps \ Qt \ 2009.03 \ qt \ mkspecs \ win32-g ++" -o debug \ testqstring.o testqstring.cpp

testqstring.cpp: 63: 27: testqstring.moc: такого файла или каталога нет
NMAKE: фатальная ошибка U1077: «C: \ Apps \ Qt \ 2009.03 \ mingw \ bin \ g ++. EXE»: код возврата «0x1» Стоп.
NMAKE: фатальная ошибка U1077: «C: \ PROGRA ~ 1 \ MICROS ~ 3 \ VC \ BIN \ nmake.exe»: код возврата «0x2» Стоп.

Итак, я вижу, что moc.exe вызывается для генерации debug / testqstring.moc, но этот файл никогда не генерируется.

Спасибо за любые советы, которые вы можете предоставить.

Ответы [ 5 ]

4 голосов
/ 30 августа 2009

Похоже, вы пытаетесь использовать nmake для сборки с MinGW. nmake - это инструмент MSVC.

Если вы хотите сделать сборку с MinGW, вы должны использовать mingw32-make. Если вы хотите сделать сборку с MSVC, вы должны использовать Qt, собранный с MSVC (что означает, что вы должны собрать ее самостоятельно или иметь коммерческую лицензию).

2 голосов
/ 29 ноября 2009

У меня была проблема, что moc.exe не генерировал moc-файлы с помощью nmake. Причиной был неправильный путь moc.exe внутри Makefile.Debug.

Что-то вроде:

C: /Qt/2009.03/qt/bin \ moc.exe

Я изменяю это на:

C: \ Qt \ 2009.03 \ Qt \ Bin \ moc.exe

и теперь это работает. ;)

К сожалению, qmake будет генерировать make-файлы каждый раз, когда вы запускаете его из меню или перестраиваете / очищаете решение / проект. Я думаю, что это ошибка конфигурации qmake.

Чтобы исправить это навсегда, вам нужно найти файл C: \ MyQtDir \ mkspecs \ win32-msvc2008 \ qmake.conf. Для других конфигов вы должны изменить win32-msvc2008.

Для меня это было в C: \ Qt \ 2009.03 \ qt \ mkspecs \ win32-msvc2008 \ qmake.conf

Поиск фразы «QMAKE_MOC». Вы найдете несколько таких строк:

QMAKE_MOC               = $$[QT_INSTALL_BINS]\moc.exe
QMAKE_UIC               = $$[QT_INSTALL_BINS]\uic.exe
QMAKE_IDC               = $$[QT_INSTALL_BINS]\idc.exe

QT_INSTALL_BINS - это неправильный путь. Разделителями каталогов по-прежнему являются '/', но они должны быть '\'. На данный момент я не знаю точно, где я должен изменить QT_INSTALL_BINS. Но путь qt для меня не изменится, поэтому я заменил макрос на жестко заданные пути:

QMAKE_MOC               = C:\Qt\2009.03\qt\bin\moc.exe
QMAKE_UIC               = C:\Qt\2009.03\qt\bin\uic.exe
QMAKE_IDC               = C:\Qt\2009.03\qt\bin\idc.exe

Теперь с мосом проблем больше нет. Перестройки тоже будут работать нормально.

Надеюсь, это поможет;)

1 голос
/ 29 августа 2009

Вы пытались использовать компилятор / инструменты, включенные в Qt в / mingw / bin? (В моей системе Qt установлен в C: \ Qt \ 2009.03.) В прошлый раз, когда я проверял, некоммерческий дистрибутив Qt не будет работать с Visual Studio. Я только что попробовал это из командной строки Qt, и это сработало.

qmake -project "CONFIG += qtestlib"

qmake

mingw32-make

Надеюсь, это поможет.

0 голосов
/ 29 марта 2010

В случае компиляции с VC nmake здесь есть обходной путь для этой ошибки: http://bugreports.qt -project.org / просмотр / QTBUG-6470

0 голосов
/ 29 августа 2009

Ты уверен, что МО не генерируется?Он находится в каталоге Debug, поэтому вам нужно либо #include "Debug / teststring.moc", либо #include с дополнительной опцией компилятора -IDebug.

...