cmake构建在Visual stdio 2019 和Xcode的Qt的程序

概述:用CMake可以方便地构建Qt的应用程序,前提是你已经配置好用Visual Stdio 开发的Qt的环境或者Xcode的Qt开发环境。

1、编写CMakeLists.txt

cpp 复制代码
cmake_minimum_required(VERSION 3.6)

set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "My multi config types" FORCE)

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER AutoMoc)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(CcQtApp)

if(WIN32)
	add_definitions("/wd4819")
elseif(APPLE) 
   	SET(CMAKE_OSX_DEPLOYMENT_TARGET "10.12")
endif(WIN32)

macro(ADD_FRAMEWORK fwname appname)
find_library(FRAMEWORK_${fwname}
    NAMES ${fwname}
    PATHS ${CMAKE_OSX_SYSROOT}/System/Library
    PATH_SUFFIXES Frameworks
    NO_DEFAULT_PATH)
if( ${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND)
    MESSAGE(ERROR ": Framework ${fwname} not found")
else()
    TARGET_LINK_LIBRARIES(${appname} ${FRAMEWORK_${fwname}})
    MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}")
endif()
endmacro(ADD_FRAMEWORK)

if(WIN32)
    set(QtVersion 5.14)
elseif(APPLE)
    set(QtVersion 5.7)
elseif(LINUX)
    set(QtVersion 5.14)
endif()

if(WIN32)
    set(exe_property WIN32)
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD /Zi /MP /Gm- /Qpar /wd4996")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
    set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF /LARGEADDRESSAWARE")
    add_definitions(-DUNICODE -D_UNICODE -D_SCL_SECURE_NO_WARNINGS -DWIN32 -DV_LOG -DCURL_STATICLIB)

elseif(APPLE)
    SET(BUILD_WITH_INSTALL_RPATH TRUE)
    set(exe_property MACOSX_BUNDLE)
    set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_CXX_FLAGS}")

    message("CMAKE_OSX_DEPLOYMENT_TARGET is ${CMAKE_OSX_DEPLOYMENT_TARGET}")
elseif(LINUX)
    SET(CMAKE_BUILD_TYPE Debug)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
endif(WIN32)

# 引入Qt的核心库
find_package(Qt5Core $ENV{QTVERSION} REQUIRED)
find_package(Qt5Gui $ENV{QTVERSION} REQUIRED)
find_package(Qt5Widgets $ENV{QTVERSION} REQUIRED)

set (NAME CcQtApp)

add_executable(${NAME} ${exe_property} main.cpp)

# 使用Qt核心库
qt5_use_modules(${NAME} Core)
qt5_use_modules(${NAME} Gui)
qt5_use_modules(${NAME} Widgets)

2、编写main.cpp测试demo

cpp 复制代码
#include <QApplication>
#include <QWidget>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
  
    QWidget window;
    window.resize(650, 350);
    window.setWindowTitle("简单的cmake构建的Qt窗口程序");
    window.show();
  
    return app.exec();
}

3、创建一个build文件夹(生成项目文件,不用污染源代码,方便阅读)

4、进入build目录执行以下命令

cmake -G"Visual Studio 16 2019" -A Win32 ..

说明-A Win32生成的是win32(x86)的工程,默认不写为x64

5、在build下打开.sln文件

6、打开sln进行编译

相关推荐
SadSunset几秒前
(19)Bean的循环依赖问题
java·开发语言·前端
JIngJaneIL3 分钟前
基于Java+ vue图书管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
Wpa.wk19 分钟前
自动化测试-鼠标+键盘操作 - Actions高级控件
java·开发语言·测试工具·自动化·计算机外设·actions·高级控件
四维碎片23 分钟前
【Qt】生产者-消费者模式学习笔记
笔记·qt·学习
一水鉴天25 分钟前
整体设计 定稿 之25 重构和改造现有程序结构 之1 (codebuddy)
开发语言·人工智能·重构
g***B73827 分钟前
Java 的第三次跃迁:从企业级语言走向智能时代的通用计算引擎
java·开发语言
lly20240630 分钟前
Maven 构建配置文件
开发语言
晚风_END30 分钟前
postgresql数据库|数据库维护系列|postgresql数据库参数配置详解和数据库维护时机的选择(三)
运维·开发语言·数据库·postgresql·oracle
JIngJaneIL32 分钟前
基于Java + vue校园论坛系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
零小陈上(shouhou6668889)1 小时前
YOLOv8+PyQt5海洋船只检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)
开发语言·python·yolo