准备工具:
vscode https://code.visualstudio.com/
cmake https://cmake.org/download/
ninja https://ninja-build.org/
qt https://download.qt.io/archive/qt/ 使用cmake进行qt开发需要qt5.15.x及以后的版本(qt6.x.x)
编译器 安装 VisualStudio 或 其它编译器
安装vscode插件:
C/C++ Extension Pack
推荐主题插件:One Dark Pro
配置:
打开设置面板(ctrl+,),并打开settings.json:
将以下设置项粘贴到settings.json:
// editor
"editor.suggestSelection": "first",
"editor.minimap.enabled": false,
"editor.multiCursorModifier": "ctrlCmd",
"editor.formatOnType": true,
"editor.renderWhitespace": "none",
"editor.formatOnSaveMode": "modifications",
"editor.formatOnPaste": true,
"editor.fontSize": 15,
"editor.unicodeHighlight.nonBasicASCII": false,
"editor.unicodeHighlight.includeStrings": false,
// workbench
"workbench.startupEditor": "none",
"workbench.tree.indent": 25,
"workbench.colorTheme": "One Dark Pro",
// cmake settings
"cmake.configureOnOpen": false,
"cmake.cmakePath": "D:/Qt/Tools/CMake_64/bin/cmake.exe",
"cmake.configureEnvironment": {
"CMAKE_PREFIX_PATH": "D:/dev-space/qt5.15.6_msvc2019_64",
},
"cmake.generator": "Ninja",
"cmake.configureSettings": {
"CMAKE_MAKE_PROGRAM": "D:/Qt/Tools/Ninja/ninja.exe",
},
// C++ Formatting
"C_Cpp.formatting": "vcFormat",
"C_Cpp.clang_format_style": "Visual Studio",
"C_Cpp.codeAnalysis.updateDelay": 500,
"C_Cpp.intelliSenseUpdateDelay": 500,
"C_Cpp.autocompleteAddParentheses": true,
"C_Cpp.vcFormat.newLine.beforeOpenBrace.lambda": "sameLine",
"C_Cpp.vcFormat.newLine.beforeOpenBrace.function": "newLine",
"C_Cpp.vcFormat.space.pointerReferenceAlignment": "right",
"C_Cpp.vcFormat.space.beforeBlockOpenBrace": true,
"C_Cpp.vcFormat.space.beforeEmptySquareBrackets": true,
"C_Cpp.vcFormat.space.afterKeywordsInControlFlowStatements": true,
"C_Cpp.vcFormat.space.afterComma": true,
"C_Cpp.default.browse.limitSymbolsToIncludedHeaders": true,
"C_Cpp.vcFormat.indent.multiLineRelativeTo": "statementBegin",
"C_Cpp.vcFormat.indent.lambdaBracesWhenParameter": false,
- 设置cmake程序路径:
"cmake.cmakePath": "D:/Qt/Tools/CMake_64/bin/cmake.exe",
- 全局设置Qt安装目录(如果要进行Qt开发):
"cmake.configureEnvironment": {
"CMAKE_PREFIX_PATH": "D:/dev-space/qt5.15.6_msvc2019_64",
},
- 设置Ninja:
"cmake.generator": "Ninja",
"cmake.configureSettings": {
"CMAKE_MAKE_PROGRAM": "D:/Qt/Tools/Ninja/ninja.exe",
},
工程示例:
1、项目总工程文件,相当于visual studio 的解决方案文件(*.sln)
cmake_minimum_required(VERSION 3.14)
project(apitest-main VERSION 1.0.0)
add_subdirectory(apilib)
add_subdirectory(apitest)
2、子工程文件1,相当于visual studio 的工程文件(*.vcxproj),生成一个动态库文件
cmake_minimum_required(VERSION 3.14)
project(apilib VERSION 1.0.0)
include(../../cmake/qt-base.cmake)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
find_package(Qt5 COMPONENTS Gui)
include_directories(include)
file(GLOB apilibSrc
"include/*.h" "src/*.cpp"
)
add_definitions(-DAPITEST_LIB)
add_library(${TargetName} SHARED ${apilibSrc})
target_link_libraries(${TargetName} PRIVATE
Qt::Gui
)
其中引入了一个公共设置qt-base.cmake文件,内容如下:
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
if(CMAKE_BUILD_TYPE STREQUAL Debug AND WIN32)
set(BinSuffix d)
endif()
set(TargetName ${PROJECT_NAME}${BinSuffix})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
3、子工程文件2,生成一个可执行文件并依赖于子工程1
cmake_minimum_required(VERSION 3.14)
project(apitest VERSION 1.0.0)
include(../../cmake/qt-base.cmake)
find_package(Qt5 COMPONENTS Gui)
include_directories(../apilib/include)
link_directories(../apilib/lib)
file(GLOB apitestSrc
"src/*.h" "src/*.cpp"
)
add_executable(${TargetName} ${apitestSrc})
target_link_libraries(${TargetName} PRIVATE
Qt::Gui apilib
)
4、调试配置文件
{
"configurations": [
{
"name": "apitest",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceRoot}/apitest/bin/apitest",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"visualizerFile": "D:/Qt/Tools/qt5.natvis",
"environment": [
{
"name": "PATH",
"value": "D:/dev-space/qt5.15.6_msvc2019_64/bin;${workspaceRoot}/apilib/bin;${env:PATH}"
}
],
}
]
}
program 为要调试的程序
visualizerFile 为qt对象内部变量可视化描述文件,总之设置了这个文件后,调试的时候就可以方便的查看Qt的对象。在安装QtVs助手后,会在文档中安装此文件:
在 environment 变量中设置 PATH 环境变量,调试的时候就可以找到依赖的dll了。
5、项目设置(将覆盖全局settings.json里的设置项)
如果想在此项目中使用别的Qt版本可以添加以下设置,否则不需要配置此文件。
{
"cmake.configureEnvironment": {
"CMAKE_PREFIX_PATH": "D:/Qt/qt5.15.9_msvc2019_64_static/",
},
}
QA:
1、如何编译:
ctrl+shift+p 唤出命令输入框
输入 cmake configure 回车,配置工程
输入 cmake build 回车,编译
2、如何调试:
按下F5,或者点击:
3、添加 ui 文件后在 cpp 中不识别:
输入 cmake configure 回车,配置工程
输入 cmake build 回车,编译
然后再回到 cpp 中就可以识别了
4、出现奇怪的编译错误无法找到问题:
删除工程目录下的 build 文件夹,然后重新编译