一:構建環境
關於Qt環境下的項目,這裏也使用了cmake進行構建,這樣可以減少對工程文件的依賴,同時可以做到跨平臺的使用。
目前使用的平臺是:CMake3.16.4 + VS2015。
二:目錄結構
國際慣例,直接上工程目錄結構:
根目錄:
source目錄:、
三:CMakeLists文件說明
同樣的我們看一下根目錄的寫法:
cmake_minimum_required(VERSION 3.5.1)
project("EQt")
message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}")
#設置對c++11的支持
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# 設置第三方頭文件
set(include_third ${CMAKE_CURRENT_SOURCE_DIR}/source/thirdlibs/include/)
include_directories(SYSTEM ${include_third})
# 設置第三方庫路徑
set(lib_boost ${CMAKE_CURRENT_SOURCE_DIR}/source/thirdlibs/libs/widows/boost)
set(lib_opencv ${CMAKE_CURRENT_SOURCE_DIR}/source/thirdlibs/libs/widows/opencv)
set(lib_tbb ${CMAKE_CURRENT_SOURCE_DIR}/source/thirdlibs/libs/widows/tbb)
link_directories(${lib_boost} ${lib_opencv} ${lib_tbb})
# 配置Qt
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# 打開全局moc,目標關聯的.h,.cpp
set(CMAKE_AUTOMOC ON)
# 打開全局uic,目標關聯的.ui
set(CMAKE_AUTOUIC ON)
# 打開全局rcc,用於編譯資源文件
set(CMAKE_AUTORCC ON)
# 查找Qt庫文件
find_package( Qt5 REQUIRED
COMPONENTS Widgets Core Gui Qml
)
include_directories(
${Qt5Widgets_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
${QT_USE_FILE}
Qt5::Qml
)
add_definitions(${QT_DEFINITIONS})
add_subdirectory("source")
目前沒有做平臺化區分,當前的CMakeLists.txt中未對linux平臺進行配置。後續在平臺移植下會進行補充和修改。
source下的僅僅是對當前目錄文件的包含,所以不做過多說明。目前widget中是對qt項目的運用,所以直接看widget下的CMakeLists.txt:
project(widget)
FILE(GLOB_RECURSE HEAD
*.h
)
FILE(GLOB_RECURSE SOURCE
*.cpp
*.ui
)
FILE(GLOB_RECURSE QRC
*.qrc
)
FILE(GLOB_RECURSE RES
*.*
)
source_group(widget FILES ${HEAD} ${SOURCE} ${QRC} ${RES})
add_library(${PROJECT_NAME} STATIC ${SOURCE_TREE} ${HEAD} ${SOURCE} ${QRC} ${RES})
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
#設置頭文件搜索目錄
include_directories(
${CMAKE_SOURCE_DIR}/source/widget
)
四:測試
根據上一篇的配置,進行vs工程的配置和構建,最後生成vs工程項目目錄如下:
對widget項目進行編譯即可,因爲widget是靜態庫項目,所以可以看到生成的widget.lib庫即可。