Visual Studio 2019编译QT5.12.0 x64

2021-07-14 20:26:32 900

下载源码

https://download.qt.io/archive/qt/5.12/5.12.0/single/

编译工具

Perl

https://strawberryperl.com/download/5.26.3.1/strawberry-perl-5.26.3.1-64bit-portable.zip

Ruby

https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.3-1/rubyinstaller-2.5.3-1-x64.7z

Python

以上的都要加入环境变量内

OpenSSL (可选)

openssl的编译看这个 https://blog.22xcode.com/article/537118021248876545

如果链接 openssl, configure如下 (x86/x64和debug/release要相互匹配)

(静态)

configure.bat 
-static -static-runtime  
-prefix "D:/qt" 
-confirm-license -opensource 
-release 
-static 
-ssl 
OPENSSL_LIBS="-lssleay32 -llibeay32 -lUser32 -lAdvapi32 -lGdi32"  -- 动态可以不用这个
-openssl-linked 
-ID:\openssl\include  -- 头文件目录
-LD:\openssl\lib  -- 库目录 -- 动态可以不用这个
-platform win32-msvc 
-nomake examples -nomake tests 
-plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg 
-opengl desktop 
-mp

5.12.0的qt, 匹配的是openssl-1.0.2u的openssl

注意动态/静态链接, x86和x64都要匹配上

编译

MDd

qt-source-5.12.0\qtbase\mkspecs\common\msvc-desktop.conf

QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD
QMAKE_CFLAGS_DEBUG      = -Zi -MDd

MD 表示运行时是多线程动态库

MDd 的 d 则是带上了debug信息的库

MT多线程静态库

平常开发可以用MDd, 发布出去则需要使用MD/MT

MD 要带上QT的一堆dll, 发布出去还需要配合安装包之类的

MT 则是一个文件, 适合小工具发布, 据说按qt的开源许可, 如果是MT, 则需要公开源码

编译64位的需要用到x64 Native Tools Command Prompt for VS 2019, 安装visual studio会自动带上, 以下命令行操作都在这个工具内进行

Configure

源码路径下

configure.bat -static -prefix "D:\qt" -confirm-license -opensource -debug-and-release -platform win32-msvc -nomake examples -nomake tests -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp

(静态编译还要修改msvc-desktop.conf, MD改为MT)

configure.bat 
-static //静态编译
-prefix "D:/qt" //指明安装的目录
-confirm-license -opensource  //指明是开源版本的qt
-debug-and-release //指明需要debug版和release版,可以单独选择release版
-platform win32-msvc  //指明使用msvc编译
-nomake examples -nomake tests  //不编译样例
-plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg //可选插件
-opengl desktop 
-mp //多核编译

如果选了OpenSSL链接

则输出会有

  OpenSSL ................................ yes
    Qt directly linked to OpenSSL ........ yes

nmake && nmake install

QtCreator

qt自带的ide

可以直接下载安装 https://iso.mirrors.ustc.edu.cn/qtproject/archive/qtcreator/7.0/7.0.2/qt-creator-opensource-windows-x86_64-7.0.2.exe

Visual Studio

Qt Visual Studio Tools

自行在vs拓展内下载

设置 .ui 文件用QtCreator打开

如果双击.ui文件打开QtCreator再关闭后报错, 则需要重新设置一个打开方式

附几个命令

debug-dynamic-32

configure.bat -prefix "D:/debug-dynamic-32" -confirm-license -opensource -debug -ssl -openssl -ID:\openssl-debug-32\include -platform win32-msvc  -nomake examples -nomake tests  -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg  -opengl desktop  -mp

release-dynamic-32

configure.bat -prefix "D:\release-dynamic-32" -confirm-license -opensource -release -ssl -openssl -ID:\openssl-release-dynamic-32\include -platform win32-msvc  -nomake examples -nomake tests  -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg  -opengl desktop  -mp

release-static-64

configure.bat -prefix "D:\release-static-64" -confirm-license -opensource -static -release -ssl -openssl OPENSSL_LIBS="-lssleay32 -llibeay32 -lUser32 -lAdvapi32 -lGdi32" -openssl-linked  -ID:\openssl-release-static-64\include -LD:\openssl-release-static-64\lib -platform win32-msvc  -nomake examples -nomake tests  -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg  -opengl desktop -mp



JsonCpp 编译安装使用

JsonCpp 编译安装使用

下载源码 https://github.com/open-source-parsers/jsoncpp打开cmake-gui填路径依次点击 configure / generate用visual studio打开 jsoncpp.sln根据用途编译对应目标visual studio 项目配置对应头文
2023-11-19

Crypto++ AES加密和解密

安装源码下载 https://cryptopp.com/#download用visual studio打开项目cryptlib项目属性中配置Debug/x64, C/C++ > 代码生成中 配置运行库为MDd, 要保持和引用项目一致生成目录x64\Output\Debug\cryptlib.lib下
2023-11-18

C++ 类型转换操作符重载

示例template <typename T> operator T () const { } Poco库中的使用Var.hPoco::Dynamic::Var template <typename T> operator T () const { VarHolder* pHolder =
2022-08-30

CMake 链接静态库 示例

现有库lib-a, lib-b可执行文件final链接情况lib-b 静态链接 lib-a, final静态链接lib-b 和 lib-a, 且final同样静态编译lib-aCMakeLists.txtcmake_minimum_required(VERSION 3.19) project(lib
2022-08-24

CMake 链接 OpenSSL 静态库

示例CMakeLists.txt如下cmake_minimum_required(VERSION 3.5) project(test CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unu
2022-08-23

C++ 获取当前时间并格式化

#include <chrono> #include <ctime> #include <iomanip> #include <sstream> using namespace std; int main(int argc, char **argv) { // 获取本地时间 au
2022-08-20

C++ 获取Windows环境变量

#include <windows.h> string getValue(const char* env) { string value = ""; char valueArr[1024] = { 0 }; unsigned int pathSize = GetEnvi
2022-02-10

C++Web框架Drogon

Drogon是一个基于C++14/17的Http应用框架,使用Drogon可以方便的使用C++构建各种类型的Web应用服务端程序。Drogon的主要应用平台是Linux,也支持Mac OS、FreeBSD和Windows。它的主要特点如下:网络层使用基于epoll(macOS/FreeBSD下是kq
2021-11-09

C++ Web 框架 Oat++

Oat++轻量、跨平台、高性能、完全零依赖Oat++ 主页:https://oatpp.ioOat++ 文档:https://oatpp.io/docs/startGitHub 地址:https://github.com/oatpp/oatpp其主要特性有:随处运行Oat++ 没有任何依赖性,可以很
2021-10-25
Java JNI 调用 C++方法 基于 IDEA Visual Stutio 2019

Java JNI 调用 C++方法 基于 IDEA Visual Stutio 2019

JNIJava Native Interface首先写一个java类package com.test; public class JNI { //native关键字 public native int add(int a, int b); } 执行javah命令注意路径我的JN
2021-07-20

Visual Studio 2019 文件编码问题

Visual Studio 对 utf-8 的支持相当差.cpp/.h 文件先调出高级保存选项菜单, 具体百度设置文件字符编码为utf-8还不够, 还要在项目 => 属性 => C/C++ => 所有选项 => 附加选项 中 设置 /utf-8.rc 文件默认编码gbk, 加了特殊字符无法显示然后改
2021-07-18

Visual Studio 2019编译QT5.12.0 x64

下载源码https://download.qt.io/archive/qt/5.12/5.12.0/single/编译工具Perlhttps://strawberryperl.com/download/5.26.3.1/strawberry-perl-5.26.3.1-64bit-portable.
2021-07-14

C++中友元函数不能重载的运算符

C++规定有四个运算符 =, ->, [], () 不可以是全局域中的重载(即不能重载为友员函数)当把赋值运算符重载为类的友员函数,在程序中执行类对象的赋值语句时,程序就会出现两种矛盾的选择。1、因为它认为类中并没有重载赋值运算符的成员函数,所以它根据C++的规则,会去调用相应的构造函数。2、但是在
2021-07-11

C++复制构造函数几种特殊情况

一int main() { Test cc; //会调用拷贝构造函数 将cc赋值给dd, 因为dd不存在(没有初始化), 所以需要调用拷贝构造函数进行初始化 Test dd = cc; cout << &cc << endl; cout << &dd << e
2021-07-05

freemarker 时间显示不正常 设置时区

项目在本地开发的时候显示正常,部署上服务器就一直差8个小时,最后发现freemarker官方文档有这样的说明time_zone:时区的名称来显示并格式化时间。 默认情况下,使用JVM的时区。 也可以是 Java 时区 API 接受的值,或者 "JVM default" (从 FreeMarker 2
2020-03-28
IDEA 2019.1 xml 不高亮

IDEA 2019.1 xml 不高亮

前几天更新了idea后,发现xml里的代码都没有了高亮,变得跟记事本一个德性了打开setting ,搜索 File Types,找到xml项, 查看下方的匹配格式,果然没有xml,(idea真是厉害)点击右方的+,输入*.xml,点击ok,解决问题
2020-03-28

npm install 淘宝镜像

npm install --registry=https://registry.npm.taobao.org
2020-03-28
Java中方法的参数传递机制

Java中方法的参数传递机制

来看一段代码 public class Man { private String name; private Integer age; public String getName() { return name; } publi
2020-03-28
基于自定义注解手写权限控制

基于自定义注解手写权限控制

方法一: AOP 方法二: 拦截器项目结构项目依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-w
2020-03-28

Docker 部署 详细全过程 附代码

Docker 部署本站 全过程环境:CentOS7.61. 安装Docker其他版本CentOS可以参考这个https://help.aliyun.com/document_detail/187598.html查看本机内核版本,内核版本需高于 3.10uname -r 确保 yum 包最新yum u
2020-03-28

SpringBoot 启动普通java工程

引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.9</version> </dependency>
2020-03-28

Vue.js DOM操作

<template> <input type="button" @click="reply($event)" value="回复"> </template> export default { methods: { replyFun(e) {
2020-03-29
CentOS7编译调试OpenJDK12

CentOS7编译调试OpenJDK12

1. 下载源码https://hg.openjdk.java.net/jdk/jdk12点击左侧的browse,再点击zip,就可以下载zip格式的源码压缩包。unzip xxx.zip 解压文件2. 安装jdkyum install java-11-openjdk-devel -y3. 运行con
2020-04-23
编写自己的Spring Boot Starter

编写自己的Spring Boot Starter

1.新建一个maven项目命名规则统一是xxx-spring-boot-starter完整pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
2020-06-29