LINUX.ORG.RU

Cmake Qt 5.6 undefined reference to vtable

 , ,


0

2

сабж. Вот мой CMakeLists :

cmake_minimum_required(VERSION 2.8)
project(InternalEye)


add_definitions(-std=c++14)
#set(CMAKE_PREFIX_PATH "/home/zamazan4ik/Qt/5.6/gcc_64/")
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Widgets)
find_package(Qt5Core)
find_package(Qt5Gui)

#aux_source_directory(. SRC_LIST)
include_directories(
        ${CMAKE_SOURCE_DIR}/headers
        ${CMAKE_SOURCE_DIR}/headers/gui
)

qt5_wrap_cpp (MOC_SOURCES ${HEADERS})

add_executable(${PROJECT_NAME}
    src/Application.cpp
    src/cpu.cpp
    src/DateDifference.cpp
    src/main.cpp
    src/Util.cpp
    src/Vendor.cpp

    src/gui/MainWindow.cpp
    src/gui/MenuBar.cpp

    src/modules/benchmark/Benchmarks.cpp

    src/modules/computer/Boot.cpp
    src/modules/computer/Computer.cpp
    src/modules/computer/DevTools.cpp
    src/modules/computer/DisplayInfo.cpp
    src/modules/computer/Filesystem.cpp
    src/modules/computer/Group.cpp
    src/modules/computer/Language.cpp
    src/modules/computer/LoadInfo.cpp
    src/modules/computer/MemoryInfo.cpp
    src/modules/computer/OperatingSystem.cpp
    src/modules/computer/UptimeInfo.cpp
    src/modules/computer/User.cpp

    src/modules/devices/Devices.cpp
    src/modules/devices/InputDevices.cpp
    src/modules/devices/Module.cpp

    src/modules/network/Network.cpp

)


qt5_use_modules(${PROJECT_NAME} Widgets Core Gui)
#target_link_libraries(${PROJECT_NAME} Qt5::Widgets)

Errors :

20:35:22: Выполняются этапы для проекта InternalEye...
20:35:22: Запускается: «/usr/bin/make» 
[  3%] Automatic moc for target InternalEye
[  3%] Built target InternalEye_automoc
Scanning dependencies of target InternalEye
[  7%] Building CXX object CMakeFiles/InternalEye.dir/src/Application.cpp.o
[ 10%] Building CXX object CMakeFiles/InternalEye.dir/src/cpu.cpp.o
[ 14%] Building CXX object CMakeFiles/InternalEye.dir/src/DateDifference.cpp.o
[ 17%] Building CXX object CMakeFiles/InternalEye.dir/src/main.cpp.o
[ 21%] Building CXX object CMakeFiles/InternalEye.dir/src/Util.cpp.o
[ 25%] Building CXX object CMakeFiles/InternalEye.dir/src/Vendor.cpp.o
[ 28%] Building CXX object CMakeFiles/InternalEye.dir/src/gui/MainWindow.cpp.o
[ 32%] Building CXX object CMakeFiles/InternalEye.dir/src/gui/MenuBar.cpp.o
[ 35%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/benchmark/Benchmarks.cpp.o
[ 39%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/Boot.cpp.o
[ 42%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/Computer.cpp.o
[ 46%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/DevTools.cpp.o
[ 50%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/DisplayInfo.cpp.o
[ 53%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/Filesystem.cpp.o
[ 57%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/Group.cpp.o
[ 60%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/Language.cpp.o
[ 64%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/LoadInfo.cpp.o
[ 67%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/MemoryInfo.cpp.o
[ 71%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/OperatingSystem.cpp.o
[ 75%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/UptimeInfo.cpp.o
[ 78%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/computer/User.cpp.o
[ 82%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/devices/Devices.cpp.o
[ 85%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/devices/InputDevices.cpp.o
[ 89%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/devices/Module.cpp.o
[ 92%] Building CXX object CMakeFiles/InternalEye.dir/src/modules/network/Network.cpp.o
[ 96%] Building CXX object CMakeFiles/InternalEye.dir/InternalEye_automoc.cpp.o
[100%] Linking CXX executable InternalEye
CMakeFiles/InternalEye.dir/src/Application.cpp.o: In function `Application::Application()':
Application.cpp:(.text+0x32): undefined reference to `vtable for Application'
CMakeFiles/InternalEye.dir/src/Application.cpp.o: In function `Application::~Application()':
Application.cpp:(.text+0x1b9): undefined reference to `vtable for Application'
CMakeFiles/InternalEye.dir/build.make:747: recipe for target 'InternalEye' failed
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/InternalEye.dir/all' failed
Makefile:83: recipe for target 'all' failed
CMakeFiles/InternalEye.dir/src/gui/MainWindow.cpp.o: In function `MainWindow::MainWindow(QWidget*)':
MainWindow.cpp:(.text+0x4e): undefined reference to `vtable for MainWindow'
MainWindow.cpp:(.text+0x60): undefined reference to `vtable for MainWindow'
CMakeFiles/InternalEye.dir/src/gui/MainWindow.cpp.o: In function `MainWindow::~MainWindow()':
MainWindow.cpp:(.text+0x341): undefined reference to `vtable for MainWindow'
MainWindow.cpp:(.text+0x353): undefined reference to `vtable for MainWindow'
CMakeFiles/InternalEye.dir/src/gui/MainWindow.cpp.o: In function `MainWindow::tr(char const*, char const*, int)':
MainWindow.cpp:(.text._ZN10MainWindow2trEPKcS1_i[_ZN10MainWindow2trEPKcS1_i]+0x3b): undefined reference to `MainWindow::staticMetaObject'
CMakeFiles/InternalEye.dir/src/gui/MenuBar.cpp.o: In function `MenuBar::MenuBar(QWidget*)':
MenuBar.cpp:(.text+0x27): undefined reference to `vtable for MenuBar'
MenuBar.cpp:(.text+0x39): undefined reference to `vtable for MenuBar'
CMakeFiles/InternalEye.dir/src/gui/MenuBar.cpp.o: In function `MenuBar::tr(char const*, char const*, int)':
MenuBar.cpp:(.text._ZN7MenuBar2trEPKcS1_i[_ZN7MenuBar2trEPKcS1_i]+0x3b): undefined reference to `MenuBar::staticMetaObject'
collect2: error: ld returned 1 exit status
make[2]: *** [InternalEye] Error 1
make[1]: *** [CMakeFiles/InternalEye.dir/all] Error 2
make: *** [all] Error 2
20:35:45: Процесс «/usr/bin/make» завершился с кодом 2.
Ошибка при сборке/установке проекта InternalEye (комплект: Desktop Qt 5.6.0 GCC 64bit)
Во время выполнения этапа «Сборка»
20:35:45: Прошло времени: 00:23.

Исходники (только в чуть другой иерархии): https://github.com/ZaMaZaN4iK/InternalEye

qmake всё делает нормально и всё работает:

#-------------------------------------------------
#
# Project created by QtCreator 2016-01-29T15:29:42
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = InternalEye
TEMPLATE = app

CONFIG += c++11\
          c++14\
          c++17


SOURCES += main.cpp\
        MainWindow.cpp \
    cpu.cpp \
    Computer.cpp \
    OperatingSystem.cpp \
    Util.cpp \
    MemoryInfo.cpp \
    DisplayInfo.cpp \
    UptimeInfo.cpp \
    LoadInfo.cpp \
    Benchmarks.cpp \
    Boot.cpp \
    DateDifference.cpp \
    Network.cpp \
    Devices.cpp \
    InputDevices.cpp \
    Vendor.cpp \
    MenuBar.cpp \
    SystemTray.cpp \
    Application.cpp \
    Group.cpp \
    User.cpp \
    Module.cpp \
    Filesystem.cpp \
    Language.cpp \
    DevTools.cpp

HEADERS  += MainWindow.h \
    cpu.h \
    Computer.h \
    Util.h \
    Benchmarks.h \
    DateDifference.h \
    Network.h \
    Devices.h \
    Vendor.h \
    Constants.h \
    MenuBar.h \
    SystemTray.h \
    Application.h

RESOURCES += \
    Resources.qrc

попробуйте сделать make VERBOSE=1 и сравнить ключи помпиляции, возможно проблема в -std=c++14

zaz ★★★★ ()

Что-то не вижу генерации moc-файлов в выхлопе. Убери qt5_wrap_cpp и попробуй добавить хедеры содержащие Q_OBJECT в список файлов для компиляции.

vazgen05 ★★ ()
Ответ на: комментарий от vazgen05

да, заработало. Но... неужели cmake так не дружит с Qt? просто решил перейти с qmake на cmake. А тут меня такая заподлянка ждала. Мб стоило оставаться на qmake?

zamazan4ik ★★ ()
Ответ на: комментарий от zamazan4ik

я не вижу, чтобы в CMakeLists.txt ты определял HEADERS

PS вообще да, qt_wrap_cpp не нужен в явном виде обычно, если добавить хидеры в add_executable, cmake их сам раскроет в таком случае

arcanis ★★★★ ()
Последнее исправление: arcanis (всего исправлений: 1)

Всё просто отлично

У меня твоим CMakeLists.txt собирает. Только пути поправил:

cmake_minimum_required(VERSION 2.8)
project(InternalEye)


add_definitions(-std=c++14)
#set(CMAKE_PREFIX_PATH "/home/zamazan4ik/Qt/5.6/gcc_64/")
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Widgets)
find_package(Qt5Core)
find_package(Qt5Gui)

#aux_source_directory(. SRC_LIST)
include_directories(
        ${CMAKE_SOURCE_DIR}/headers
        ${CMAKE_SOURCE_DIR}/headers/gui
)

qt5_wrap_cpp (MOC_SOURCES ${HEADERS})

add_executable(${PROJECT_NAME}
    Application.cpp
    cpu.cpp
    DateDifference.cpp
    main.cpp
    Util.cpp
    Vendor.cpp
    MainWindow.cpp
    MenuBar.cpp
    Benchmarks.cpp
    Boot.cpp
    Computer.cpp
    DevTools.cpp
    DisplayInfo.cpp
    Filesystem.cpp
    Group.cpp
    Language.cpp
    LoadInfo.cpp
    MemoryInfo.cpp
    OperatingSystem.cpp
    UptimeInfo.cpp
    User.cpp
    Devices.cpp
    InputDevices.cpp
    Module.cpp
    Network.cpp
)


qt5_use_modules(${PROJECT_NAME} Widgets Core Gui)
#target_link_libraries(${PROJECT_NAME} Qt5::Widgets)
00:37:28: Running steps for project InternalEye...
00:37:28: Starting: "/usr/bin/make" clean
00:37:28: The process "/usr/bin/make" exited normally.
00:37:28: Starting: "/usr/bin/make" 
Scanning dependencies of target InternalEye_automoc
[  3%] Automatic moc for target InternalEye
Generating moc_Application.cpp
Generating moc_MainWindow.cpp
Generating moc_MenuBar.cpp
[  3%] Built target InternalEye_automoc
Scanning dependencies of target InternalEye
[  7%] Building CXX object CMakeFiles/InternalEye.dir/Application.cpp.o
[ 10%] Building CXX object CMakeFiles/InternalEye.dir/cpu.cpp.o
[ 14%] Building CXX object CMakeFiles/InternalEye.dir/DateDifference.cpp.o
[ 17%] Building CXX object CMakeFiles/InternalEye.dir/main.cpp.o
[ 21%] Building CXX object CMakeFiles/InternalEye.dir/Util.cpp.o
[ 25%] Building CXX object CMakeFiles/InternalEye.dir/Vendor.cpp.o
[ 28%] Building CXX object CMakeFiles/InternalEye.dir/MainWindow.cpp.o
[ 32%] Building CXX object CMakeFiles/InternalEye.dir/MenuBar.cpp.o
[ 35%] Building CXX object CMakeFiles/InternalEye.dir/Benchmarks.cpp.o
[ 39%] Building CXX object CMakeFiles/InternalEye.dir/Boot.cpp.o
[ 42%] Building CXX object CMakeFiles/InternalEye.dir/Computer.cpp.o
[ 46%] Building CXX object CMakeFiles/InternalEye.dir/DevTools.cpp.o
[ 50%] Building CXX object CMakeFiles/InternalEye.dir/DisplayInfo.cpp.o
[ 53%] Building CXX object CMakeFiles/InternalEye.dir/Filesystem.cpp.o
[ 57%] Building CXX object CMakeFiles/InternalEye.dir/Group.cpp.o
[ 60%] Building CXX object CMakeFiles/InternalEye.dir/Language.cpp.o
[ 64%] Building CXX object CMakeFiles/InternalEye.dir/LoadInfo.cpp.o
[ 67%] Building CXX object CMakeFiles/InternalEye.dir/MemoryInfo.cpp.o
[ 71%] Building CXX object CMakeFiles/InternalEye.dir/OperatingSystem.cpp.o
[ 75%] Building CXX object CMakeFiles/InternalEye.dir/UptimeInfo.cpp.o
[ 78%] Building CXX object CMakeFiles/InternalEye.dir/User.cpp.o
[ 82%] Building CXX object CMakeFiles/InternalEye.dir/Devices.cpp.o
[ 85%] Building CXX object CMakeFiles/InternalEye.dir/InputDevices.cpp.o
[ 89%] Building CXX object CMakeFiles/InternalEye.dir/Module.cpp.o
[ 92%] Building CXX object CMakeFiles/InternalEye.dir/Network.cpp.o
[ 96%] Building CXX object CMakeFiles/InternalEye.dir/InternalEye_automoc.cpp.o
[100%] Linking CXX executable InternalEye
[100%] Built target InternalEye
00:38:12: The process "/usr/bin/make" exited normally.
00:38:12: Elapsed time: 00:45.
EXL ★★★★★ ()
Ответ на: Всё просто отлично от EXL

P.S.

[exl@ASUS-A52F ~/Downloads]$ qmake -version
QMake version 3.0
Using Qt version 5.5.1 in /usr/lib
[exl@ASUS-A52F ~/Downloads]$ cmake -version
cmake version 3.4.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).
EXL ★★★★★ ()

И да, вычисти из репозитория файлы *.autosave, *.user* и прочую бяку. Изучи .gitignore https://github.com/github/gitignore/blob/master/Qt.gitignore

Ну и ASSERT failure in QList<T>::at: «index out of range», file /usr/include/qt/QtCore/qlist.h, line 510 у меня почему-то в этой строке: https://github.com/ZaMaZaN4iK/InternalEye/blob/master/Boot.cpp#L67

Выхлоп getOutputConsole(«last -F | grep 'system boot'»); такой:

4:reboot   system boot  4.3.3-2-ARCH     Tue May  3 14:57:27 2016   still running
8:reboot   system boot  4.3.3-2-ARCH     Mon May  2 21:55:20 2016 - Tue May  3 03:02:29 2016  (05:07)
11:reboot   system boot  4.3.3-2-ARCH     Mon May  2 21:24:19 2016 - Mon May  2 21:54:13 2016  (00:29)
14:reboot   system boot  4.3.3-2-ARCH     Mon May  2 14:32:03 2016 - Mon May  2 16:04:59 2016  (01:32)
17:reboot   system boot  4.3.3-2-ARCH     Sun May  1 20:35:35 2016 - Mon May  2 02:47:49 2016  (06:12)
20:reboot   system boot  4.3.3-2-ARCH     Sun May  1 16:44:13 2016 - Sun May  1 18:17:06 2016  (01:32)
23:reboot   system boot  4.3.3-2-ARCH     Sat Apr 30 20:52:57 2016 - Sun May  1 02:21:28 2016  (05:28)
26:reboot   system boot  4.3.3-2-ARCH     Mon Jan 25 12:45:57 2016 - Tue Jan 26 09:00:13 2016  (20:14)
29:reboot   system boot  4.3.3-2-ARCH     Mon Jan 25 10:36:29 2016 - Tue Jan 26 09:00:13 2016  (22:23)
32:reboot   system boot  4.3.3-2-ARCH     Sun Jan 24 13:44:53 2016 - Mon Jan 25 07:30:28 2016  (17:45)
35:reboot   system boot  4.3.3-2-ARCH     Sun Jan 24 12:33:12 2016 - Mon Jan 25 07:30:28 2016  (18:57)
38:reboot   system boot  4.3.3-2-ARCH     Sun Jan 24 04:07:07 2016 - Mon Jan 25 07:30:28 2016 (1+03:23)
41:reboot   system boot  4.3.3-2-ARCH     Sun Jan 24 03:29:00 2016 - Mon Jan 25 07:30:28 2016 (1+04:01)
75:reboot   system boot  4.3.3-2-ARCH     Sun Jan 17 18:45:50 2016 - Mon Jan 25 07:30:28 2016 (7+12:44)
77:reboot   system boot  4.3.3-2-ARCH     Sun Jan 17 18:42:49 2016 - Sun Jan 17 18:45:31 2016  (00:02)
80:reboot   system boot  4.3.3-2-ARCH     Sun Jan 17 18:11:08 2016 - Sun Jan 17 18:42:24 2016  (00:31)
86:reboot   system boot  4.3.3-2-ARCH     Sat Jan 16 13:49:01 2016 - Sun Jan 17 18:10:46 2016 (1+04:21)
91:reboot   system boot  4.3.3-2-ARCH     Sat Jan 16 08:26:59 2016 - Sat Jan 16 08:56:45 2016  (00:29)
98:reboot   system boot  4.3.3-2-ARCH     Sat Jan 16 06:09:05 2016 - Sat Jan 16 06:52:30 2016  (00:43)
114:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 22:34:10 2016 - Sat Jan 16 06:08:12 2016  (07:34)
116:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 22:32:18 2016 - Fri Jan 15 22:33:53 2016  (00:01)
121:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 21:59:41 2016 - Fri Jan 15 22:32:01 2016  (00:32)
124:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 21:56:23 2016 - Fri Jan 15 21:59:21 2016  (00:02)
127:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 21:50:39 2016 - Fri Jan 15 21:56:05 2016  (00:05)
130:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 21:47:43 2016 - Fri Jan 15 21:50:20 2016  (00:02)
143:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 19:54:17 2016 - Fri Jan 15 21:47:26 2016  (01:53)
146:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 16:59:14 2016 - Fri Jan 15 17:02:14 2016  (00:03)
149:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 04:10:00 2016 - Fri Jan 15 04:21:58 2016  (00:11)
165:reboot   system boot  4.3.3-2-ARCH     Fri Jan 15 00:14:51 2016 - Fri Jan 15 04:09:37 2016  (03:54)
168:reboot   system boot  4.3.3-2-ARCH     Thu Jan 14 23:07:22 2016 - Fri Jan 15 00:14:34 2016  (01:07)

QStringList list перед сегфолтом такой:

("reboot", "system", "boot", "4.3.3-2-ARCH", "", "Tue", "May", "3", "14:57:27", "2016", "still", "running")

Разбирайся с этим сам :)

EXL ★★★★★ ()
Ответ на: комментарий от EXL

да, за багрепорты спасибо. Я знаю, что у меня там баг. Там уже есть fix. Уже разобрался локально. Пока я хочу перейти на cmake. .gitgnore изучил, но пока не обновил github

Самое интересное, что у меня не собирается. Быть может, потому, что я с qt creator собираю?

zamazan4ik ★★ ()
Ответ на: комментарий от zamazan4ik

Я тоже через Qt Creator собираю. Попробуйте ручками удалить каталог сборки, затем файл CMakeLists.txt.user и заново сгенерировать проект.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

Самое интересное, что всё равно не собирается:-) Я даже не знаю, что ещё можно сделать. Почему-то вариант с прописываеним хедеров в add_executable работает

zamazan4ik ★★ ()
Ответ на: комментарий от EXL

вся проблема, что moc почему-то не работает. Правда у меня cmake 3.5.1

zamazan4ik ★★ ()
Ответ на: комментарий от zamazan4ik

Странно. В любом случае что-то локальное, ищи причину в cmake. Попробуй с V=1 запустить, посмотреть.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

Не знаю, в чём проблема. Решил косытлём - добавил все хедеры

zamazan4ik ★★ ()
Ответ на: комментарий от zamazan4ik

Мб стоило оставаться на qmake?

Может и стоило, смотря какая у тебя цель

annulen ★★★★★ ()
Ответ на: комментарий от annulen

Цель - использовать нормальную систему сборки. Просто вижу, что cmake чаще юзается. Да и мощнее оно. Да и научиться работать с этим не будет лишним.

Но проблемы какие-то есть. В QMMP кстати у них работает всё

zamazan4ik ★★ ()
Ответ на: комментарий от EXL

я нашёл, в чём причина. Почему-то .cpp и .h должны лежать в одной директории. Тогда MOC запускается и всё ок. Всё компилится. Если же нет, то moc просто не запускается. Не подскажете, почему так происходит?

zamazan4ik ★★ ()
Ответ на: комментарий от vazgen05

может Вы подскажете, почему MOC не срабатывает, когда .h и .cpp файлы в разных директориях?

zamazan4ik ★★ ()
Ответ на: комментарий от zamazan4ik

Тогда наслаждайся, впереди тебя ждет еще много боли :)

Я смотрю ты используешь Qt Creator - не удивляйся, что качество интеграции хуже, чем с qmake, по вполне объективным причинам

annulen ★★★★★ ()
Ответ на: комментарий от zamazan4ik

CMake говно и неочевидная лапша потому что.

Шаг влево, шаг вправо от «стандартных практик» — и начинаются проблемы.

ИМХО, надо бы зарепортить им это поведение.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

А есть разве альтернативы cmake? Я буду благодарен, если подскажете

zamazan4ik ★★ ()
Ответ на: комментарий от annulen

Ну это ясно, что qmake будет получше приготовлен в креаторе. Qbs ещё не тыкал

zamazan4ik ★★ ()
Ответ на: комментарий от EXL

Я ещё что-то слышал про gradle для плюсов. Но вроде ещё сыровато как

zamazan4ik ★★ ()
Ответ на: комментарий от zamazan4ik

Нету, QBS разве что адекватнее будет, но он мало распространён.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

CMake говно и неочевидная лапша потому что.

Сильное заявление.. проверять я его конечно не буду есть чем подкрепить его?

UVV ★★★★★ ()
Ответ на: комментарий от EXL

Шаг влево, шаг вправо от «стандартных практик» — и начинаются проблемы.

Кстати да, вчера столкнулся с тем, что cmake не умеет делать deploy to target :(

UVV ★★★★★ ()
Ответ на: комментарий от UVV

Этим тредом и твоим постом ниже.

Аналогов же нет. Вот и приходится выбирать наименее упоротый и наиболее распространённый.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Ну скажем так, что cmake вполне себе годен. Он не такой тормоз, как scons, хотя scons на python, поэтому тоже удобен.

У qmake костыль на костыле. Чего только стоило добавить генерацию исходников по wsdl файлу, в cmake это с полпинка делается, емнип.

Я решил заюзать cmake в не qt'шном проекте, а поскольку оно тоже для embedded, то решил попробовать deploy & debug - обломался. Или считаешь, что qmake стоит использовать и в не qt'шных проектах?

UVV ★★★★★ ()
Ответ на: комментарий от EXL

И к чему эта ссылка? Я как-то написал в pro-файле такую конструкцию, она сразу заработала, и я забыл про неё. Но есть и светлая сторона. Это приучит к нормальному стилю кодирования =) Хотя я как-то работал в проекте, где скобки так ставили ((

Нет, он ещё хуже

Ну да, всё тлен.

UVV ★★★★★ ()
Последнее исправление: UVV (всего исправлений: 1)

А зачем вообще код с Qt собирать cmake-ом?

Anvill ()
Ответ на: комментарий от Anvill

А зачем вообще код с Qt собирать cmake-ом?

А ты предлагаешь прибить его к QtCreator + qmake, да? Других IDE типа не существует?

MuZHiK-2 ★★★★ ()
Ответ на: комментарий от Anvill

но разве qmake не для этого?

Нет. Он слабо подходит для сложных проектов. Его стезя — студенческие лабы на десяток-другой файлов.

EXL ★★★★★ ()
Ответ на: комментарий от MuZHiK-2

Можно без Creator-а обойтись: для студии есть qt плагин, под clion должны скоро сделать, с vim/sublime вообще проблем возникнуть не должно, других годных IDE я не знаю.

Anvill ()
Ответ на: комментарий от EXL

Нет. Он слабо подходит для сложных проектов. Его стезя — студенческие лабы на десяток-другой файлов.

Ты несешь какую-то хрень. А то типа autotools больше подходит, да?

MuZHiK-2 ★★★★ ()
Ответ на: комментарий от Anvill

для студии есть qt плагин

Зачем мне надо засирать студию этим шлаком?

под clion должны скоро сделать

Это тормозное жабо-поделие лучше и не вспоминай.

других годных IDE я не знаю.

А если мне просто под NMake надо проект сделать? А под XCode? А под Eclipse? А если кросс-компиляцией собрать надо? И ознакомься уже с концепцией генераторов проекта.

MuZHiK-2 ★★★★ ()
Ответ на: комментарий от MuZHiK-2

Других IDE типа не существует?

кроме qtcreator разве чтото есть для qt ?
еклипсу не предлагать

x905 ★★★★★ ()
Ответ на: комментарий от EXL

Он слабо подходит для сложных проектов

сборка qtcreator идет через qmake - не достаточно сложно ?

x905 ★★★★★ ()
Ответ на: комментарий от MuZHiK-2

А то типа autotools больше подходит, да?

Я же говорю, самое адекватное из популярных — cmake. И тот параша. Но остальные ещё хуже.

Есть надежда на QBS, но взлетит ли он — покажет время.

qmake за пределами Qt проектов практически не используется.

EXL ★★★★★ ()
Ответ на: комментарий от x905

кроме qtcreator разве чтото есть для qt ?

Как минимум Visual Studio.

MuZHiK-2 ★★★★ ()
Ответ на: комментарий от EXL

Я же говорю, самое адекватное из популярных — cmake. И тот параша. Но остальные ещё хуже.

Я на протяжении долгого времени слышу от тебя в сторону CMake много вони, причем вони ничем не обоснованный. Может быть, пришло время обосновать? Есть куча серьезных проектов на CMake (да тот же Clang возьми), там типа дураки сидят, а ты такой вот умный.

MuZHiK-2 ★★★★ ()
Ответ на: комментарий от MuZHiK-2

лично для меня аргумент это отвратный синтаксис. Реально отвратительный.

zamazan4ik ★★ ()
Ответ на: комментарий от zamazan4ik

Не вижу ничего отвратного. Это просто дело привычки.

MuZHiK-2 ★★★★ ()
Ответ на: комментарий от EXL

Я вот тоже подумываю применить cmake в своём будущем опенсорсном проекте. Проект монолитный, исполняемый файл один, других зависимостей, кроме самой Qt не предвидится. Чем привлёк cmake - возможностью автоматом собирать пакеты для разных ОС и дистрибутивов.

Или остаться на qmake и ручками сделать один раз .spec для .rpm, пару каталогов с конфигами для .deb и ещё какую-нибудь хрень для .msi/.dmg... Потому что кроме сборки пакетов, в остальном меня и qmake устраивает...

hobbit ★★★★★ ()
Ответ на: комментарий от MuZHiK-2

Может быть, пришло время обосновать?

Ты сидишь в треде, где CMake обосрался и просишь пруфцов. Ты забыл выпить таблеточки?

EXL ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.