OpenGL + Qt使用CMake [英] OpenGL + Qt using CMake

查看:436
本文介绍了OpenGL + Qt使用CMake的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用 *。pro 文件创建的 Qt 项目,我需要将其迁移到 CMakeLists 。这个项目使用一个简单的 OpenGL 动画来显示手的3D模型。我已经改变它使用 CMake ,但我遇到了2个问题。 (程序编译但不能正常运行)


  1. 程序的内存消耗从20-50MB使用<$使用 CMake (可能某些库已完全加载或某些内容),将 *。pro
  2. 程序运行速度非常慢(例如每5-10秒一帧),与使用 *。pro 文件(约。每秒3帧)

问题是,我做错了,我该如何解决?



这是 *。pro 文件:

  QT + = core gui opengl 

TARGET = RGBD_3D_Viewer
TEMPLATE = app


SOURCES + = main.cpp \
mainwindow.cpp \
glwidget.cpp \
glwidget_Camera.cpp \
glwidget_Comm.cpp \
glwidget_Extractors.cpp \
glwidget_Rendering.cpp \
glwidget_Video.cpp \
glwidget_UI_Mouse.cpp \
glwidget_OpenGL.cpp \
mainwindow_Comm.cpp \
mainwindow_GUI.cpp \
model.cpp \
cameraSet.cpp \
model_Mesh.cpp \
model_Skeleton.cpp \
model_Skin.cpp \
model_Extra_SkinningStuff.cpp \\ \\
animation.cpp \
animation_Transform.cpp \
videoSequence.cpp \
sequence.cpp \
mainwindow_UI_Keyboard_Mouse.cpp \
tracker.cpp \
mainwindow_FrameNumber.cpp \
model_Limits.cpp \
animation_Files_CompleteSequence.cpp \
mainwindow_MODELS_INFO.cpp \
modelSET.cpp \
animation_0_RotAxes_Limits.cpp \
myMATH.cpp \
types_Background.cpp \
model_Extra_VOI.cpp \
fingertipSet.cpp \
tracker_OnIndexChange .cpp \
tracker_wFeatureSet.cpp

HEADERS + = mainwindow.h \
glwidget.h \
model.h \
cameraSet .h \
animation.h \
videoSequence.h \
sequence.h \
tracker.h \
mymath.h \
modelSET.h \
ui_mainwindow.h \
featureSet.h \
typesBackground.h \
fingertipSet.h

FORMS + = mainwindow.ui



INCLUDEPATH + = / usr / include / eigen3 /

INCLUDEPATH + = / home / cvg11 / projects / development / RGBD_3D_Viewer / glm


LIBS + = -L / usr / local / lib /
LIBS + = -lopencv_core
LIBS + = -lopencv_highgui


QMAKE_CXXFLAGS + = -O3
QMAKE_CXXFLAGS + = -frounding-math
#QMAKE_CXXFLAGS + = -std = c ++ 0x

这是 CMakeLists.txt 档案:

  project(3d_viewer)
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

include_directories($ {CMAKE_CURRENT_BINARY_DIR})
include_directories {PROJECT_SOURCE_DIR} / include $ {PROJECT_SOURCE_DIR} / glm)

find_package(PkgConfig)
pkg_check_modules(EIGEN3 REQUIRED eigen3)
include_directories($ {EIGEN3_INCLUDE_DIRS})

#Opencv required
find_package(OpenCV COMPONENTS core highgui REQUIRED)
include_directories($ {OPENCV_INCLUDE_DIRS})
link_directories($ {OPENCV_LIBRARY_DIRS})
add_definitions($ {OPENCV_DEFINITIONS} )

消息(\\\
\\\
Found OpenCV \\\
\\\



需要QT4
find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
set(QT_USE_QTOPENGL TRUE)
include($ {QT_USE_FILE})
add_definitions($ {QT_DEFINITIONS})

消息(\\\
\\\
Found QT4 \\\
\\\



INCLUDE_DIRECTORIES($ {QT_QTOPENGL_INCLUDE_DIR} $ {OPENGL_INCLUDE_DIR})

#set默认路径可执行文件到bin目录
set(EXECUTABLE_OUTPUT_PATH $ {PROJECT_SOURCE_DIR} / bin)
#设置构建库到lib目录的默认路径
set(LIBRARY_OUTPUT_PATH $ {PROJECT_SOURCE_DIR} / lib)


文件(GLOB VIEWER_SOURCES src / *。cpp)

文件(GLOB VIEWER_INCLUDES include / *。h)


#set QT headers
SET(QT_HEADERS
include / mainwindow.h
include / glwidget.h


#set QT表单
SET(QT_FORMS
ui / mainwindow.ui


#为QT创建moc
QT4_WRAP_CPP(QT_MOC $ {QT_HEADERS})

#process ui
QT4_WRAP_UI(QT_FORMS_HEADERS $ {QT_FORMS})

ADD_EXECUTABLE(3d_viewer $ {VIEWER_SOURCES} $ {VIEWER_INCLUDES}
$ {QT_HEADERS}
$ {QT_MOC}
$ {QT_FORMS})

TARGET_LINK_LIBRARIES(3d_viewer $ {QT_LIBRARIES} $ {OpenCV_LIBS})
set_property(TARGET 3d_viewer PROPERTY COMPILE_DEFINITIONS QT_SHARED)

编辑:



c $ c> make VERBOSE = 1 (我只是显示最后一个链接,其他文件相同的文件)



CMake

  [100%] Building CXX object CMakeFiles / 3d_viewer.dir / include / moc_glwidget.cxx.o 
/ usr / bin / c ++ -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_SHARED -O3 -DNDEBUG -I / home / cvg11 / projects / development / RGBD_3D_Viewer / build - I / home / cvg11 / projects / development / RGBD_3D_Viewer / include -I / home / cvg11 / projects / development / RGBD_3D_Viewer / glm -I / usr / include / eigen3 -I / usr / local / include / opencv -I / usr / local / include -isystem / usr / include / qt4 -isystem / usr / include / qt4 / QtOpenGL -isystem / usr / include / qt4 / QtGui -isystem / usr / include / qt4 / QtCore -o CMakeFiles / 3d_viewer.dir / include /moc_glwidget.cxx.o -c /home/cvg11/projects/development/RGBD_3D_Viewer/build/include/moc_glwidget.cxx
链接CXX可执行文件../bin/3d_viewer
/ usr / local / bin / cmake -E cmake_link_script CMakeFiles / 3d_viewer.dir / link.txt --verbose = 1
/ usr / bin / c ++ -O3 -DNDEBUG CMakeFiles / 3d_viewer.dir / src / mainwindow_FrameNumber.cpp.o CMakeFiles / 3d_viewer.dir /src/animation.cpp.o CMakeFiles / 3d_viewer.dir / src / glwidget_OpenGL.cpp.o CMakeFiles / 3d_viewer.dir / src / main.cpp.o CMakeFiles / 3d_viewer.dir / src / mainwindow_Comm.cpp.o CMakeFiles / 3d_viewer .dir / src / glwidget_Comm.cpp.o CMakeFiles / 3d_viewer.dir / src / myMATH.cpp.o CMakeFiles / 3d_viewer.dir / src / model.cpp.o CMakeFiles / 3d_viewer.dir / src / glwidget_Rendering.cpp.o CMakeFiles /3d_viewer.dir/src/model_Extra_VOI.cpp.o CMakeFiles / 3d_viewer.dir / src / videoSequence.cpp.o CMakeFiles / 3d_viewer.dir / src / cameraSet.cpp.o CMakeFiles / 3d_viewer.dir / src / model_Extra_SkinningStuff.cpp。 o CMakeFiles / 3d_viewer.dir / src / mainwindow_MODELS_INFO.cpp.o CMakeFiles / 3d_viewer.dir / src / animation_0_RotAxes_Limits.cpp.o CMakeFiles / 3d_viewer.dir / src / modelSET.cpp.o CMakeFiles / 3d_viewer.dir / src / glwidget_Video。 cpp.o CMakeFiles / 3d_viewer.dir / src / animation_Transform.cpp.o CMakeFiles / 3d_viewer.dir / src / glwidget_Camera.cpp.o CMakeFiles / 3d_viewer.dir / src / sequence.cpp.o CMakeFiles / 3d_viewer.dir / src / CMakeFiles / 3d_viewer.dir / src / 3d_viewer.dir / src / tracker_wFeatureSet.cpp.o CMakeFiles / 3d_viewer.dir / src / model_Skin.cpp.o CMakeFiles / 3d_viewer.dir / src / tracker_OnIndexChange.cpp.o CMakeFiles / 3d_viewer.dir / src / mainwindow.cpp.o CMakeFiles / 3d_viewer.dir / src / types_Background.cpp.o CMakeFiles / 3d_viewer.dir / src / glwidget_Extractors.cpp.o CMakeFiles / 3d_viewer。 dir / src / model_Limits.cpp.o CMakeFiles / 3d_viewer.dir / src / model_Skeleton.cpp.o CMakeFiles / 3d_viewer.dir / src / tracker.cpp.o CMakeFiles / 3d_viewer.dir / src / model_Mesh.cpp.o CMakeFiles / 3d_viewer.dir / src / mainwindow_UI_Keyboard_Mouse.cpp.o CMakeFiles / 3d_viewer.dir / src / fingertipSet.cpp.o CMakeFiles / 3d_viewer.dir / src / mainwindow_GUI.cpp.o CMakeFiles / 3d_viewer.dir / src / glwidget.cpp.o CMakeFiles / 3d_viewer.dir / include / moc_mainwindow.cxx.o CMakeFiles / 3d_viewer.dir / include / moc_glwidget.cxx.o -o ../bin/3d_viewer -L / usr / local / cuda / lib64 -rdynamic -lglut -lXmu -lXi -lQtOpenGL -lQtGui -lQtCore /usr/local/lib/libopencv_core.so.2.4.9 /usr/local/lib/libopencv_highgui.so.2.4.9 /usr/local/lib/libopencv_core.so.2.4.9 -Wl,-rpath,/ usr / local / cuda / lib64:/ usr / local / lib -Wl,-rpath-link,/ usr / local / lib
make [2]:离开目录`/ home / cvg11 / projects / development / RGBD_3D_Viewer / build'
/ usr / local / bin / cmake -E cmake_progress_report / home / cvg11 / projects / development / RGBD_3D_Viewer / build / CMakeFiles 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
[100%]建立目标3d_viewer

*。pro 专案:

  g ++ -c -pipe -frounding-math -O3 -O2 -w -D_REENTRANT -DQT_WEBKIT -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I / usr / share / qt4 / mkspecs / linux-g ++ -I。 -I / usr / include / qt4 / QtCore -I / usr / include / qt4 / QtGui -I / usr / include / qt4 / QtOpenGL -I / usr / include / qt4 -I / usr / include / eigen3- /../projects/development/RGBD_3D_Viewer/glm -I / usr / X11R6 / include -I。 -一世。 -o moc_mainwindow.o moc_mainwindow.cpp 
的/ usr / bin中/ MOC-QT4 -DQT_WEBKIT -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I在/ usr /共享/ QT4 / mkspecs / Linux的G ++ -I。 -I / usr / include / qt4 / QtCore -I / usr / include / qt4 / QtGui -I / usr / include / qt4 / QtOpenGL -I / usr / include / qt4 -I / usr / include / eigen3- /../projects/development/RGBD_3D_Viewer/glm -I / usr / X11R6 / include -I。 -一世。 glwidget.h -o moc_glwidget.cpp
G ++ -c哌-frounding,数学-O3 -O2 -w -D_REENTRANT -DQT_WEBKIT -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I在/ usr /共享/ QT4 / mkspecs / linux-g ++ -I。 -I / usr / include / qt4 / QtCore -I / usr / include / qt4 / QtGui -I / usr / include / qt4 / QtOpenGL -I / usr / include / qt4 -I / usr / include / eigen3- /../projects/development/RGBD_3D_Viewer/glm -I / usr / X11R6 / include -I。 -一世。 -o moc_glwidget.o moc_glwidget.cpp
G ++轮候册,-O1 -o RGBD_3D_Viewer main.o中mainwindow.o glwidget.o glwidget_Camera.o glwidget_Comm.o glwidget_Extractors.o glwidget_Rendering.o glwidget_Video.o glwidget_UI_Mouse.o glwidget_OpenGL。 Ømainwindow_Comm.o mainwindow_GUI.o model.o cameraSet.o model_Mesh.o model_Skeleton.o model_Skin.o model_Extra_SkinningStuff.o animation.o animation_Transform.o videoSequence.o sequence.o mainwindow_UI_Keyboard_Mouse.o tracker.o mainwindow_FrameNumber.o model_Limits.o animation_Files_CompleteSequence的.o mainwindow_MODELS_INFO.o modelSET.o animation_0_RotAxes_Limits.o myMATH.o types_Background.o model_Extra_VOI.o fingertipSet.o tracker_OnIndexChange.o tracker_wFeatureSet.o moc_mainwindow.o moc_glwidget.o -L / usr / lib目录/ x86_64的Linux的GNU的-L / usr / X11R6 / lib -L ​​/ usr / local / lib / -lopencv_core -lopencv_highgui -lQtOpenGL -lQtGui -lQtCore -lGL -lpthread

我尝试添加/删除-frounding-math标志,没有任何明显的区别...

解决方案

您似乎试图在这里用错误的方式改变qmake的优化级别值:

  QMAKE_CXXFLAGS + = -O3 

这一行的问题是,g ++将使用-O2用于编译阶段,-O1用于默认情况下为链接阶段。您似乎只想更改编译器阶段,因为您不指定链接器标志。但是, + = 表示使用qmake添加,不覆盖。实现原始目标的正确方法是:

  QMAKE_CXXFLAGS_RELEASE  -  = -O2 
QMAKE_CXXFLAGS_RELEASE + = -O3

和以下行重写链接器阶段:

  QMAKE_LFLAGS_RELEASE  -  = -O1 

将自然需要在此更改后重新运行qmake。现在,-O3意味着它将针对性能而不是空间进行优化。因此,你以前对空间的关注可能是由于这一点。 。第二部分,仍是疑问,但是,如果没有具体细节



有关C进行默认优化级别是不同的传递到qmake;它是 -O3 。您可以方便地查看通过运行以下简称cmake的片段:

 消息(CMAKE_CXX_FLAGS_RELEASE:$ {CMAKE_CXX_FLAGS_RELEASE})

您需要同步这些内容,例如,如果你想在任何地方使用 -O2 ,覆盖cmake,你需要应用这个:

  set(CMAKE_CXX_FLAGS_RELEASE-O2)

如果您想使用 -O3 ,请参阅上述用于更改qmake项目文件中的逻辑。如果你想使用 -Os ,你需要应用这两种类型的更改。我认为,这是相当多了。



至于调试,你可能想不过完全变成优化在两种情况下有一个更好的调试经验,<! / p>

一般来说,你需要决定性能与空间特性。你似乎在抱怨两者,但你本质上不会得到完美主义两者。如果你想完全优化空间,使用 -Os ,如果为了性能,使用 -O3 一个折衷的解决方案,使用中间的东西等。


I have a Qt project created with a *.pro file that I need to migrate it to a CMakeLists. This project uses a simple OpenGL animation to show a 3D model of a hand. I already change it to use CMake, but I encounter 2 problems. (The program compiles but it doesn't run properly)

  1. The memory consumption of the program passes from being 20-50MB using the *.pro file, to 1.3GB using CMake (Maybe some library being loaded completely or something??)
  2. The program runs incredibly slow (like 1 frame every 5-10 seconds) in contrast with the speed from using the *.pro file (approx. 3 frames per second)

The question is, what I am doing wrong and how can I fix it?

Here is the *.pro file:

QT += core gui opengl

TARGET   = RGBD_3D_Viewer
TEMPLATE = app


SOURCES +=  main.cpp\
            mainwindow.cpp \
            glwidget.cpp \
            glwidget_Camera.cpp \
            glwidget_Comm.cpp \
            glwidget_Extractors.cpp \
            glwidget_Rendering.cpp \
            glwidget_Video.cpp \
            glwidget_UI_Mouse.cpp \
            glwidget_OpenGL.cpp \
            mainwindow_Comm.cpp \
            mainwindow_GUI.cpp \
            model.cpp \
            cameraSet.cpp \
            model_Mesh.cpp \
            model_Skeleton.cpp \
            model_Skin.cpp \
            model_Extra_SkinningStuff.cpp \
            animation.cpp \
            animation_Transform.cpp \
            videoSequence.cpp \
            sequence.cpp \
            mainwindow_UI_Keyboard_Mouse.cpp \
            tracker.cpp \
            mainwindow_FrameNumber.cpp \
            model_Limits.cpp \
            animation_Files_CompleteSequence.cpp \
            mainwindow_MODELS_INFO.cpp \
            modelSET.cpp \
            animation_0_RotAxes_Limits.cpp \
            myMATH.cpp \
            types_Background.cpp \
            model_Extra_VOI.cpp \
            fingertipSet.cpp \
            tracker_OnIndexChange.cpp \
            tracker_wFeatureSet.cpp

HEADERS  += mainwindow.h \
            glwidget.h \
            model.h \
            cameraSet.h \
            animation.h \
            videoSequence.h \
            sequence.h \
            tracker.h \
            mymath.h \
            modelSET.h \
            ui_mainwindow.h \
            featureSet.h \
            typesBackground.h \
            fingertipSet.h

FORMS    += mainwindow.ui



INCLUDEPATH += /usr/include/eigen3/

INCLUDEPATH += /home/cvg11/projects/development/RGBD_3D_Viewer/glm


LIBS += -L/usr/local/lib/
LIBS += -lopencv_core
LIBS += -lopencv_highgui


QMAKE_CXXFLAGS += -O3
QMAKE_CXXFLAGS += -frounding-math
#QMAKE_CXXFLAGS += -std=c++0x

Here is the CMakeLists.txt file:

project(3d_viewer)
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories( ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/glm)

find_package( PkgConfig )
pkg_check_modules( EIGEN3 REQUIRED eigen3 )
include_directories( ${EIGEN3_INCLUDE_DIRS} )

# Opencv required
find_package(OpenCV COMPONENTS core highgui REQUIRED)
include_directories(${OPENCV_INCLUDE_DIRS})
link_directories(${OPENCV_LIBRARY_DIRS})
add_definitions(${OPENCV_DEFINITIONS})

message("\n\nFound OpenCV\n\n")


# QT4 required
find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
set(QT_USE_QTOPENGL TRUE)
include(${QT_USE_FILE})
add_definitions(${QT_DEFINITIONS})

message("\n\nFound QT4\n\n")


INCLUDE_DIRECTORIES(${QT_QTOPENGL_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} )

#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)


file(GLOB VIEWER_SOURCES src/*.cpp)

file(GLOB VIEWER_INCLUDES include/*.h)


# set QT headers
SET(QT_HEADERS
    include/mainwindow.h
    include/glwidget.h
    )

#set QT forms
SET(QT_FORMS
    ui/mainwindow.ui
)

# create moc for QT
QT4_WRAP_CPP(QT_MOC ${QT_HEADERS})

# process ui
QT4_WRAP_UI(QT_FORMS_HEADERS ${QT_FORMS})

ADD_EXECUTABLE(3d_viewer ${VIEWER_SOURCES} ${VIEWER_INCLUDES}
    ${QT_HEADERS}
    ${QT_MOC}
    ${QT_FORMS})

TARGET_LINK_LIBRARIES(3d_viewer ${QT_LIBRARIES} ${OpenCV_LIBS} )
set_property(TARGET 3d_viewer PROPERTY COMPILE_DEFINITIONS QT_SHARED)

EDIT:

Here are the two outputs of make VERBOSE=1 (I just show the last link and one of the files since the rest of the files are the same)

CMake:

[100%] Building CXX object CMakeFiles/3d_viewer.dir/include/moc_glwidget.cxx.o
/usr/bin/c++   -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_SHARED -O3 -DNDEBUG -I/home/cvg11/projects/development/RGBD_3D_Viewer/build -I/home/cvg11/projects/development/RGBD_3D_Viewer/include -I/home/cvg11/projects/development/RGBD_3D_Viewer/glm -I/usr/include/eigen3 -I/usr/local/include/opencv -I/usr/local/include -isystem /usr/include/qt4 -isystem /usr/include/qt4/QtOpenGL -isystem /usr/include/qt4/QtGui -isystem /usr/include/qt4/QtCore    -o CMakeFiles/3d_viewer.dir/include/moc_glwidget.cxx.o -c /home/cvg11/projects/development/RGBD_3D_Viewer/build/include/moc_glwidget.cxx
Linking CXX executable ../bin/3d_viewer
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/3d_viewer.dir/link.txt --verbose=1
/usr/bin/c++   -O3 -DNDEBUG    CMakeFiles/3d_viewer.dir/src/mainwindow_FrameNumber.cpp.o CMakeFiles/3d_viewer.dir/src/animation.cpp.o CMakeFiles/3d_viewer.dir/src/glwidget_OpenGL.cpp.o CMakeFiles/3d_viewer.dir/src/main.cpp.o CMakeFiles/3d_viewer.dir/src/mainwindow_Comm.cpp.o CMakeFiles/3d_viewer.dir/src/glwidget_Comm.cpp.o CMakeFiles/3d_viewer.dir/src/myMATH.cpp.o CMakeFiles/3d_viewer.dir/src/model.cpp.o CMakeFiles/3d_viewer.dir/src/glwidget_Rendering.cpp.o CMakeFiles/3d_viewer.dir/src/model_Extra_VOI.cpp.o CMakeFiles/3d_viewer.dir/src/videoSequence.cpp.o CMakeFiles/3d_viewer.dir/src/cameraSet.cpp.o CMakeFiles/3d_viewer.dir/src/model_Extra_SkinningStuff.cpp.o CMakeFiles/3d_viewer.dir/src/mainwindow_MODELS_INFO.cpp.o CMakeFiles/3d_viewer.dir/src/animation_0_RotAxes_Limits.cpp.o CMakeFiles/3d_viewer.dir/src/modelSET.cpp.o CMakeFiles/3d_viewer.dir/src/glwidget_Video.cpp.o CMakeFiles/3d_viewer.dir/src/animation_Transform.cpp.o CMakeFiles/3d_viewer.dir/src/glwidget_Camera.cpp.o CMakeFiles/3d_viewer.dir/src/sequence.cpp.o CMakeFiles/3d_viewer.dir/src/animation_Files_CompleteSequence.cpp.o CMakeFiles/3d_viewer.dir/src/glwidget_UI_Mouse.cpp.o CMakeFiles/3d_viewer.dir/src/model_Skin.cpp.o CMakeFiles/3d_viewer.dir/src/tracker_wFeatureSet.cpp.o CMakeFiles/3d_viewer.dir/src/tracker_OnIndexChange.cpp.o CMakeFiles/3d_viewer.dir/src/mainwindow.cpp.o CMakeFiles/3d_viewer.dir/src/types_Background.cpp.o CMakeFiles/3d_viewer.dir/src/glwidget_Extractors.cpp.o CMakeFiles/3d_viewer.dir/src/model_Limits.cpp.o CMakeFiles/3d_viewer.dir/src/model_Skeleton.cpp.o CMakeFiles/3d_viewer.dir/src/tracker.cpp.o CMakeFiles/3d_viewer.dir/src/model_Mesh.cpp.o CMakeFiles/3d_viewer.dir/src/mainwindow_UI_Keyboard_Mouse.cpp.o CMakeFiles/3d_viewer.dir/src/fingertipSet.cpp.o CMakeFiles/3d_viewer.dir/src/mainwindow_GUI.cpp.o CMakeFiles/3d_viewer.dir/src/glwidget.cpp.o CMakeFiles/3d_viewer.dir/include/moc_mainwindow.cxx.o CMakeFiles/3d_viewer.dir/include/moc_glwidget.cxx.o  -o ../bin/3d_viewer  -L/usr/local/cuda/lib64 -rdynamic -lglut -lXmu -lXi -lQtOpenGL -lQtGui -lQtCore /usr/local/lib/libopencv_core.so.2.4.9 /usr/local/lib/libopencv_highgui.so.2.4.9 /usr/local/lib/libopencv_core.so.2.4.9 -Wl,-rpath,/usr/local/cuda/lib64:/usr/local/lib -Wl,-rpath-link,/usr/local/lib 
make[2]: Leaving directory `/home/cvg11/projects/development/RGBD_3D_Viewer/build'
/usr/local/bin/cmake -E cmake_progress_report /home/cvg11/projects/development/RGBD_3D_Viewer/build/CMakeFiles  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
[100%] Built target 3d_viewer

*.pro project:

g++ -c -pipe -frounding-math -O3 -O2 -w -D_REENTRANT -DQT_WEBKIT -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4 -I/usr/include/eigen3 -I../../projects/development/RGBD_3D_Viewer/glm -I/usr/X11R6/include -I. -I. -o moc_mainwindow.o moc_mainwindow.cpp
/usr/bin/moc-qt4 -DQT_WEBKIT -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4 -I/usr/include/eigen3 -I../../projects/development/RGBD_3D_Viewer/glm -I/usr/X11R6/include -I. -I. glwidget.h -o moc_glwidget.cpp
g++ -c -pipe -frounding-math -O3 -O2 -w -D_REENTRANT -DQT_WEBKIT -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4 -I/usr/include/eigen3 -I../../projects/development/RGBD_3D_Viewer/glm -I/usr/X11R6/include -I. -I. -o moc_glwidget.o moc_glwidget.cpp
g++ -Wl,-O1 -o RGBD_3D_Viewer main.o mainwindow.o glwidget.o glwidget_Camera.o glwidget_Comm.o glwidget_Extractors.o glwidget_Rendering.o glwidget_Video.o glwidget_UI_Mouse.o glwidget_OpenGL.o mainwindow_Comm.o mainwindow_GUI.o model.o cameraSet.o model_Mesh.o model_Skeleton.o model_Skin.o model_Extra_SkinningStuff.o animation.o animation_Transform.o videoSequence.o sequence.o mainwindow_UI_Keyboard_Mouse.o tracker.o mainwindow_FrameNumber.o model_Limits.o animation_Files_CompleteSequence.o mainwindow_MODELS_INFO.o modelSET.o animation_0_RotAxes_Limits.o myMATH.o types_Background.o model_Extra_VOI.o fingertipSet.o tracker_OnIndexChange.o tracker_wFeatureSet.o moc_mainwindow.o moc_glwidget.o    -L/usr/lib/x86_64-linux-gnu -L/usr/X11R6/lib -L/usr/local/lib/ -lopencv_core -lopencv_highgui -lQtOpenGL -lQtGui -lQtCore -lGL -lpthread 

I tried adding/removing the -frounding-math flag without having any appreciable difference...

解决方案

You seem to be trying to change the optimization level value with qmake in the wrong way in here:

QMAKE_CXXFLAGS += -O3

The problem with this line is that g++ will use -O2 for the compiling phase and -O1 for the linking phase by default. You seem to want to change only the compiler phase as you do not specify the linker flags. However, += means addition with qmake, not override. The proper way to achieve your original goal would be this:

QMAKE_CXXFLAGS_RELEASE -= -O2
QMAKE_CXXFLAGS_RELEASE += -O3

and the following line to override the linker stage, too:

QMAKE_LFLAGS_RELEASE -= -O1

You will naturally need to rerun qmake after this change. Now, -O3 means that it will optimize for performance and not space. Therefore, your former concern about space may be due to this. The second part is still questionable, however, without concrete details.

The default optimization level for cmake is different to qmake; it is -O3. You can easily check that by running the following short cmake snippet:

message("CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}")

You need to sync these up to bring them inline. For instance, if you want to use -O2 everywhere, overriding the cmake, too, you will need to apply something this:

set(CMAKE_CXX_FLAGS_RELEASE "-O2")

If you would like to use -O3, see the aforementioned logic for changing that in the qmake project file. If you would like to use something else like -Os, you will need to apply both types of changes. I think, that is pretty much about it.

As for debugging, you may want to completely turn out optimization in both cases to have a nicer debugging experience, however!

In general, you need to decide about the performance versus space trait. You seem to be complaining about both, but you inherently will not get perfectionism at both. If you want to fully optimize for space, use -Os, if for performance, use -O3, if you want a compromised solution, use something in-between, etc.

这篇关于OpenGL + Qt使用CMake的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆