cmake_minimum_required(VERSION 3.24)
project(PainterTest)
set(CMAKE_CXX_STANDARD 17)
#指定C++标准
set(CMAKE_CXX_STANDARD 17)
#指定输出目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/output)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/output)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/output)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/output)
#自动编译QT文件
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
#开启包含当前编译目录
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#指定QT版本和对应的库
set(QT_VERSION 5)
set(REQUIRED_LIBS Core Gui Widgets OpenGL)
set(REQUIRED_LIBS_QUALIFIED Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL)
#寻找QT库
find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED)
#自动查找头文件路径函数
macro(FIND_INCLUDE_DIR result curdir) #定义函数,2个参数:存放结果result;指定路径curdir;
file(GLOB_RECURSE children "${curdir}/*.hpp" "${curdir}/*.h" ) #遍历获取{curdir}中*.hpp和*.h文件列表
file(GLOB SOURCE_INCLUDE ${children} ) #将文件放入 SOURCE_INCLUDE 中
set(dirlist "") #定义dirlist中间变量,并初始化
foreach(child ${children}) #for循环
string(REGEX REPLACE "(.*)/.*" "\\1" LIB_NAME ${child}) #字符串替换,用/前的字符替换/*h
if(IS_DIRECTORY ${LIB_NAME}) #判断是否为路径
list (FIND dirlist ${LIB_NAME} list_index) #判断dirlist是否含有${LIB_NAME}
if(${list_index} LESS 0)
LIST(APPEND dirlist ${LIB_NAME}) #将合法的路径加入dirlist变量中
else()
endif() #结束判断
endif()
endforeach() #结束for循环
set(${result} ${dirlist}) #dirlist结果放入result变量中
endmacro()
#自动查找源文件路径函数
macro(FIND_SRC_DIR result curdir)
file(GLOB_RECURSE children "${curdir}/*.cpp" "${curdir}/*.cc")
file(GLOB SOURCE_SRC ${children} )
set(dirlist "")
foreach(child ${children})
string(REGEX REPLACE "(.*)/.*" "\\1" LIB_NAME ${child})
if(IS_DIRECTORY ${LIB_NAME})
list (FIND dirlist ${LIB_NAME} list_index)
if(${list_index} LESS 0)
LIST(APPEND dirlist ${LIB_NAME})
else()
endif()
endif()
endforeach()
set(${result} ${dirlist})
endmacro()
#调用函数,指定参数
#自动查找头文件路径函数
macro(FIND_UI_DIR result curdir) #定义函数,2个参数:存放结果result;指定路径curdir;
file(GLOB_RECURSE children "${curdir}/*.ui") #遍历获取{curdir}中*.hpp和*.h文件列表
file(GLOB SOURCE_UI ${children} ) #将文件放入 SOURCE_INCLUDE 中
set(dirlist "") #定义dirlist中间变量,并初始化
foreach(child ${children}) #for循环
string(REGEX REPLACE "(.*)/.*" "\\1" LIB_NAME ${child}) #字符串替换,用/前的字符替换/*h
if(IS_DIRECTORY ${LIB_NAME}) #判断是否为路径
list (FIND dirlist ${LIB_NAME} list_index) #判断dirlist是否含有${LIB_NAME}
if(${list_index} LESS 0)
LIST(APPEND dirlist ${LIB_NAME}) #将合法的路径加入dirlist变量中
else()
endif() #结束判断
endif()
endforeach() #结束for循环
set(${result} ${dirlist}) #dirlist结果放入result变量中
endmacro()
FIND_SRC_DIR(SRC_DIR_LIST ${PROJECT_SOURCE_DIR}/src)
FIND_INCLUDE_DIR(INCLUDE_DIR_LIST ${PROJECT_SOURCE_DIR}/src)
FIND_UI_DIR(UI_DIR_LIST ${PROJECT_SOURCE_DIR}/src)
#将INCLUDE_DIR_LIST中路径列表加入工程,包括第三方库的头文件路径
include_directories(
${INCLUDE_DIR_LIST} #INCLUDE_DIR_LIST路径列表加入工程
)
#增加第三方连接库文件
if (CMAKE_BUILD_TYPE AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
else ()
endif ()
# 指定格式为utf-8
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
#使用指定的源文件来生成目标可执行文件
add_executable(${PROJECT_NAME} WIN32 main.cpp
${SOURCE_INCLUDE} ${SOURCE_SRC} ${SOURCE_UI})
target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBS_QUALIFIED})
turbolove
- 粉丝: 5545
- 资源: 9