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环境变量即可。