QtCreator vs CMD.exe, Разница в работе |
Здравствуйте, гость ( Вход | Регистрация )
QtCreator vs CMD.exe, Разница в работе |
JustOneQuestion |
7.5.2015, 11:20
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 7.5.2015 Пользователь №: 4379 Спасибо сказали: 0 раз(а) Репутация: 0 |
Приветсвуйю людей знающих, опытных и отзывчивых.
С Qt впервые столкнулся после приобретения узко-специализированного устройста, библиотеки работы с которым были под Qt. С библиотеками шёл простой пример. Собственно одна папка с файлами *.c *.cpp *.h *.dll *.a, файлов .pro .lib и каких либо проектов нет. В reedme предлагалось запустить примемр через строку g++ file1.c file2.c file3.cpp -l:libUSTROYSTVO.a -o result.exe (я в ней названия поменял, для удобства. Main в file3.cpp находится если это важно) ОС Windows 8.1, скачал и поставил Qt 5.4.1 for Windows 32-bit (MinGW 4.9.1, 856 MB) ( www.qt.io/download-open-source/ ) И через Qt 5.4 for Desktop (MinGW 4.9 32 bit) (ярлык в "меню пуск".. в плитках) запустил (вроде как) аналог cmd.exe (с батником который переменные среды прописывает) и в нем (находясь в директории с файлами примера) использовал g++ file1.c file2.c file3.cpp -l:libUSTROYSTVO.a -o result.exe Всё хорошо, без ошибок, получился екзешник примера, который вполне себе работает как нужно. Но попробовав создать проект в QtCreator и добавить в него файлы примера, чтобы работать в IDE(мне так прривычнее... уж простите если это не по православному... я не в курсе был ), у меня на этапе сборки проекта вылезло множество ошибок. В качестве примера создания проекта я использовал Empty Qmake Project. Не важно, вобщем-то, что за ошибки вылезли, главное мне хотелось бы понять, почему и как исправить то, что через командную строку всё работает, а через QtProject нет(пока)? Как правильно создать проект, который бы точно также реагировал на код как и командная строка...? Всем, кто не поленился это прочитать, спасибо и всего вам хорошего. |
|
|
JustOneQuestion |
11.5.2015, 14:41
Сообщение
#2
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 7.5.2015 Пользователь №: 4379 Спасибо сказали: 0 раз(а) Репутация: 0 |
У тебя библиотека лежит среди исходников? Да. Библиотека libUstroystvo.a, исходники pro файл, файл проекта всё в одной папке. Только во время сборки тут же создаётся ещё одна папка TmpResult в которой *.o debug release make файлы.(Я так понял это называется Теневая сборка) Пробовал создать проект без Qt (при создании проектов есть 6 шаблонов. я использовал тот что для с++ и qmake). В итоге в профайле появляется CONFIG -= qt Не знаю поддерживает ли библиотека *.а дебаг режим, поэтому убрал галочку с "отладка" - теперь у меня только "выпуск". Поставил Qt(MinGw) на другом компе на котором до этого не было ни mingw ни qt; было Windows 7 и MS VS2010. Резльутат - теже ошибки что и тут. На своём компе всё переставил заново - таже история, теже ошибки что и раньше. Так.. про make файлы... во первых их три... я не понимаю почему но. Есть просто make; есть make.release; и ... make.debug. Откуда послденее ... ннне знаю. В make.release есть вот такое (Я проект ща обозвал ProjectTestNoQt. ) INCPATH = -I"..\..\ProjectTestNoQt" -I"." -I"..\..\ProjectTestNoQt" -I"C:\ProgramFiles\Qt\Qt5.4.1\5.4\mingw491_32\mkspecs\win32-g++" LINKER = g++ LFLAGS = -Wl,-s -Wl,-subsystem,console -mthreads LIBS = -LD:/Work/QtMy/ProjectTestNoQt/ProjectTestNoQt/ -lUstroystvo В make "просто" ничего подобного не заметил. найди запись, где окончательная сборка бинаря осуществляется сравни инструкции с теми, что ты в командной строке выполнял. Я не понимаю что нужно искать. Поясните пожалуйста. Но строку типа "g++ ......" я не видел ни в одном из этих файлов. |
|
|
AD |
11.5.2015, 17:53
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
А что современные g++ умеют одновременно собирать проекты, где есть файлы с *.c и *.cpp? Попробуйте, для эксперимента, все файлы переименовать в *.cpp. И выдайте на форум конкретный список ошибок, после данной операции.
Сообщение отредактировал AD - 11.5.2015, 17:57 |
|
|
JustOneQuestion |
13.5.2015, 11:53
Сообщение
#4
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 7.5.2015 Пользователь №: 4379 Спасибо сказали: 0 раз(а) Репутация: 0 |
А что современные g++ умеют одновременно собирать проекты, где есть файлы с *.c и *.cpp? Попробуйте, для эксперимента, все файлы переименовать в *.cpp. И выдайте на форум конкретный список ошибок, после данной операции. Так.. нуу, что я могу сказать, Большое спасибо,Litkevich Yuriy, за совет. После сей нехитрой процедуры, всё скомпилилось без ошибок. И более того екзешник вроде тоже ведёт себя адекватно. .. Я не могу его проверить полностью, так как ему для этого воткнутое устройство надо, а у меня его сейчас нет у компа. Но в целом вроде всё норм Проверил снова g++ когда все файлы cpp. Вроде тоже всё хорошо. Разницы не видно(что раньше что после смены расширения) - всё вроде работет адекватно. Более того. Проверил на g++ вариант когда все файлы *.с (вместо cpp) - Всё ок. Всё работает. Проверил на QtCreator создать новый проект на С (не с++) и все файлы сделать *.С. Не работает. В отлии от g++. Тоесть ещё раз. g++ file1.c file2.c file3.cpp -l:libUSTROYSTVO.a -o result.exe через cmd.exe (c указанием переменных среды через батник или руками) работает а вот QtCreator работает только если file1 file2 file3 имеют одинаковое для всех расширение *.cpp( а не как было, один *.cpp а остальные *.c). Если все файлы для строки "g++...." (в cmd.exe) сделать *.c то оно работает. А вот QtCreator выдаёт ошибки(другие... разные). В этом сосбвтенно и заключалась РАЗНИЦА QtCreator vs CMD.exe. Теперь вопрос. А почему оно так? ) Где написано что все файлы проекта должны быть одного типа?...Почему g++ умеет работать с разными типамиа QtCreator нет?.. Почему производитель выдал пример в котором разные типы файлов (c и cpp), всмысле он жеж явно это не специально засаду остраивал.. наверно были причины... но какие? ) ААА.... Как тут редактировать свои сообщения то?. Я там ошибся с ником. Большое спасибо конечно AD за совет! А что современные g++ умеют одновременно собирать проекты, где есть файлы с *.c и *.cpp? Попробуйте, для эксперимента, все файлы переименовать в *.cpp. И выдайте на форум конкретный список ошибок, после данной операции. Нажал на кнопку "+ Спасибо" |
|
|
AD |
14.5.2015, 0:36
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Теперь вопрос. А почему оно так? ) Где написано что все файлы проекта должны быть одного типа?...Почему g++ умеет работать с разными типамиа QtCreator нет?.. Почему производитель выдал пример в котором разные типы файлов (c и cpp), всмысле он жеж явно это не специально засаду остраивал.. наверно были причины... но какие? ) Потому что при компиляции в командной строчке через задание опций g++ Вы не создаете Makefile (для Qt Creator - это pro-файл) и четко говорите, что хотите компилировать по правилам С++. Если бы вы файлы *.c задали через опции gcc, тогда бы Вы компилировали бы проект по правилам C. И, вполне возможно, появились бы те же ошибки, что и при создании через Qt Creator проекта компиляции для C, а не C++. Ну и, соответственно, при создании проекта через Qt Creator, IDE создает pro-файл автоматически, в котором четко определено по каким правилам (C or C++) и как именно надо компилировать и собирать. Поэтому если Вы хотите знать, из-за чего у Вас не собирается под C проект, то необходимо привести полный список ошибок, причем не в собственной интерпретации, а в том виде, что выдал компилятор. Так будет проще пояснить из-за чего сборка провалилась. Подозреваю, что дело, скорее всего, в специфике использования C++ возможностей, которых нет в C. |
|
|
Текстовая версия | Сейчас: 31.10.2024, 20:35 |