2009-08-29 3 views
5

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

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

> 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_THREAD_SUPPORT -I ".... \ Apps \ Qt \ 2009.03 \ qt \ include \ 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 отладки \ 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».... \ Приложения \ Qt \ 2009.03 \ qt \ include \ 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, но этот файл никогда не генерируется.

Благодарим вас за все рекомендации, которые вы можете предоставить.

+0

Вы можете включать в .pro файл, созданный при выполнении первой команды? – Ropez

+0

У меня была та же проблема. Но я решил это, удалив файл qt.conf из каталога /bin. – 2009-10-17 16:51:15

ответ

4

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

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

+0

Спасибо. Я знал, что это будет что-то простое. mingw32-make работает отлично. –

0

Вы уверены, что moc не сгенерирован? Он живет в каталоге Debug, поэтому вам нужно либо включить # debug/teststring.moc, либо #include с дополнительным параметром -IDebug-компилятора.

+0

Если вы посмотрите на строку компиляции, вы можете увидеть, что она уже включает в себя -I "debug". Пользователю не нужно явно делать это в файле .pro. – rohanpm

1

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

qmake -project "CONFIG += qtestlib" 

qmake 

mingw32-make 

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

+0

Спасибо, mingw32-make сделал трюк. Я думал, что это будет работать с nmake. В учебнике упоминаются только make и nmake. Поскольку у меня MSVC, я думал, что nmake - правильный инструмент. Очевидно, это не так. –

2

У меня была проблема с тем, что 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. Но кварты путь не изменится для меня, поэтому я заменил макрос жестко определены именами путей:

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 

Теперь нет проблем с MOC больше. Реконструкции тоже будут работать отлично.

Надеется, что это помогает;)

+1

Вы можете обновить путь QT_INSTALL_BINS, запустив qmake. qmake -set "QT_INSTALL_BINS" "C: \ Qt \ 2009.03 \ qt \ bin" Подробнее здесь: http://doc.trolltech.com/4.5/qmake-environment-reference.html –