qt item头文件与cpp不在一个文件夹编译问题

mac2025-10-30  15

写qt程序的时候经常要将item封装成lib,这样.h和.cpp就不在一个文件夹下,经常会遇到编译问题。

以下是我生产lib的cmake文件。

add_definitions(-DBOOST_NO_MEMBER_TEMPLATE_FRIENDS -DWIN32)   find_package(Qt4 REQUIRED) include(${QT_USE_FILE}) INCLUDE_DIRECTORIES( ${QT_INCLUDE_DIR} )

#qwt INCLUDE_DIRECTORIES("D:/lib/qwt-6.1.2/src") link_directories("D:/lib/qwt-6.1.2/lib")

SET(KPS_FLIRT_GUI_MOC_SRCS     ${${PROJECT_NAME}_SOURCE_DIR}/sdk/include/a.h

}

set(KPS_FLIRT_GUI_SRCS     a.cpp

)

set(KPS_FLIRT_GUI_UIS     #ADD UIS FILE HERE ##

 )

set(KPS_FLIRT_GUI_QCCS      #ADD .qrc FILE HERE###

)

SET(DEBUG_PFX "") IF(CMAKE_BUILD_TYPE MATCHES "release") ELSE(release) SET(DEBUG_PFX "${DEBUG_PFX}d") ENDIF(release)

SET(LINUX_LIB "") if(WIN32) else(WIN32) SET(LINUX_LIB 

    "${LINUX_LIB}     rt" ) endif(WIN32)

set(KPS_FLIRT_GUI_LIBS     ${LINUX_LIB}     ${Boost_LIBRARIES} )

qt4_automoc(${KPS_FLIRT_GUI_SRCS})

QT4_WRAP_CPP(KPS_FLIRT_GUI_MOC ${KPS_FLIRT_GUI_MOC_SRCS})

QT4_WRAP_UI(KPS_FLIRT_GUI_UIS_H ${KPS_FLIRT_GUI_UIS})

QT4_ADD_RESOURCES(KPS_FLIRT_GUI_QCCS_SRCS ${KPS_FLIRT_GUI_QCCS})

ADD_DEFINITIONS(-D_REENTRANT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED )

SET(LIB_NAME "libflirtgui${DEBUG_PFX}")

add_library(${LIB_NAME} ${KPS_FLIRT_GUI_SRCS} ${KPS_FLIRT_GUI_MOC} ${KPS_FLIRT_GUI_UIS_H} ${KPS_FLIRT_GUI_QCCS_SRCS} ) target_link_libraries(${LIB_NAME} ${KPS_FLIRT_GUI_LIBS})

其中:qt4_automoc(${KPS_FLIRT_GUI_SRCS})是自动生成.cxx文件

常见错误:

1、编译找不到头文件,这时候注意头文件目录是否正确,不光cpp要修改,同时要触发cmake的编译,只有改对路径不行。

2、item与boost编译冲突,使用Q_MOC_RUN隔离错误

#ifndef Q_MOC_RUN #include <boost/math/special_functions/bessel.hpp> #endif

顺便遇到了opengl在vs2010下的错误,error C2146: 语法错误: 缺少“;”(在标识符“******”的前面),傻的不行的头文件包含顺序。#include <windows.h>一定要放在第一个,第一个,第一个,没有之一!!!!

#if defined(_WINDOWS) #include <windows.h> #endif

#ifndef Q_MOC_RUN  #include <GL/gl.h> #include <GL/glu.h> #endif

最新回复(0)