cmake编译qtxlsx源码

1.简介

qtxlsx库是依赖Qt5的,用来读、写excel文档。基本用法如下:

 #include <QtXlsx>
    int main()
    {
        QXlsx::Document xlsx;
        xlsx.write("A1", "Hello Qt!");
        xlsx.saveAs("Test.xlsx");
        return 0;
    }

源码是qt项目,只能在qtcreator中编译。我需要转换成cmake项目,在visual studio中打开源码。对照qt的pro文档,制作了一份cmake项目。

2.cmake文档内容

在这里插入图片描述
如上图位置,根目录的新建CMakelist.txt文档,cmake内容:

cmake_minimum_required(VERSION 3.15)
project(QtXlsx )

set(PROJECT_VERSION_MAJOR 0)
set(PROJECT_VERSION_MINOR 0)
set(PROJECT_VERSION_PATCH 1)

set (PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
if(PROJECT_VERSION_PATCH GREATER 0)
  set (PROJECT_VERSION "${PROJECT_VERSION}.${PROJECT_VERSION_PATCH}")
endif ()

set(QtXlsx_QT_VERSION 5 CACHE STRING "Expected Qt version")
set_property(CACHE QtXlsx_QT_VERSION PROPERTY STRINGS 5 6)

set(QT_VERSION_BASE "Qt5")

set(QtXlsx_QT_COMPONENTS Core Widgets GUI GUI)
find_package(Qt${QtXlsx_QT_VERSION} COMPONENTS ${QtXlsx_QT_COMPONENTS} REQUIRED)


SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
SET(CMAKE_RELEASE_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows")
SET(CMAKE_RELWITHDEBINFO_POSTFIX "rd" CACHE STRING "add a postfix, usually empty on windows")
SET(CMAKE_MINSIZEREL_POSTFIX "s" CACHE STRING "add a postfix, usually empty on windows")

SET(CMAKE_BUILD_TYPE "Debug/Release/RelWithDebInfo" CACHE STRING "add a postfix, usually empty on windows")

message(${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
if(MSVC)
    #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4819")
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8 /std:c++17")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8 /std:c++17")
    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
    # disable macros that offend std::numeric_limits<T>::min()/max()
    add_definitions(-DNOMINMAX)
endif()

add_subdirectory(src)

src文件夹内新建CMakelist.txt,cmake内容:

add_subdirectory(xlsx)

xlsx文件夹内新建CMakelist.txt,cmake内容:


set(LIB_NAME QtXlsx)

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

file(GLOB_RECURSE UTILS_SRC ${CMAKE_SOURCE_DIR}/src/xlsx/*.cpp)
file(GLOB_RECURSE UTILS_HDRS ${CMAKE_SOURCE_DIR}/src/xlsx/*.h)

include_directories(${CMAKE_CURRENT_BINARY_DIR})

QT5_WRAP_UI(UTILS_UIS_H ${UTILS_UIS})


add_library(QtXlsx SHARED ${UTILS_HDRS} ${UTILS_SRC} ${UTILS_UIS_H})

# require c++17
target_compile_features(QtXlsx PRIVATE cxx_std_17)

target_include_directories(QtXlsx SYSTEM PUBLIC
  ${${QT_VERSION_BASE}Core_INCLUDE_DIRS}
  ${${QT_VERSION_BASE}Gui_INCLUDE_DIRS}
  ${${QT_VERSION_BASE}Gui_PRIVATE_INCLUDE_DIRS}
  )

target_link_libraries(QtXlsx
  ${QWT_LIBRARY}
  ${QT_VERSION_BASE}::Core
  ${QT_VERSION_BASE}::Gui
  )

SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES AUTOMOC TRUE AUTOUIC TRUE AUTORCC TRUE DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})

INSTALL(
		TARGETS ${LIB_NAME}
		RUNTIME DESTINATION bin
		LIBRARY DESTINATION bin
		ARCHIVE DESTINATION lib
	)

INSTALL(
		FILES       ${UTILS_SRC}
		DESTINATION include
	)

这里面限定了C++17的编译器版本,ui文件编译有关配置都可删减,具体内容可以自行简化。
CMake编译时,提供Qt5环境变量即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值