Mac + Vscode下Qt的開發配置


起因是數據結構實驗想要糊個GUI,然后去看了看Qt,又發現自己比較不適應Qt本身的界面,網上資料又比較雜亂,查了蠻久,於是自己記錄一下。

  • 首先確保有:

(1)mac+vscode(插件包括:(c/c++)/C++ Intellisense、cmake+cmake tools+cmake integration)

(2)cmake

(3)Qt Creator(version:5.0.12)

  • 配置好Qt Creator:參考Mac+Qt

  • 然后在Qt中創建新的Qt Widgets Application,Build System選cmake。得到一個包含了CMakeLists.txt的項目文件,然后把Qt軟件關了。

  • 打開vscode,用vscode 打開Qt中創建的新項目的文件夾。

  • 配置.vscode文件夾:

在項目文件夾下新建一個.vscode文件夾,vscode通過其中的配置文件來完成類似IDE一樣的編譯運行效果。

  1. command+shift+p 找到c/c++ edit configuration,使用默認文件或者復制以下代碼(我的電腦上的默認版本):
{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${default}"
            ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++98",
            "intelliSenseMode": "macos-clang-x64",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}
  1. .vscode文件夾下新建tasks.json:
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        { // 在根文件夾中執行創建文件夾build的命令
            // 除windows系統外執行的命令為`mkdir -p build`
            // windows系統是在powershell中執行命令`mkdir -Force build`
            "label": "Build_dir",
            "command": "mkdir",
            "type": "shell",
            "args": [
                "-p",
                "build"
            ],
        },
        { // 在build文件夾中調用cmake進行項目配置
            // 除windows系統外執行的命令為`cmake -DCMAKE_BUILD_TYPE=<Debug|Release|RelWithDebInfo|MinSizeRel> ../`
            // windows系統是在visual stuido的環境中執行命令`cmake -DCMAKE_BUILD_TYPE=<Debug|Release|RelWithDebInfo|MinSizeRel>  ../ -G "CodeBlocks - NMake Makefiles"`
            "label": "Cmake",
            "type": "shell",
            "command": "cmake",
            "args": [
                "-DCMAKE_BUILD_TYPE=${input:CMAKE_BUILD_TYPE}",
                "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON", // 生成compile_commands.json 供c/c++擴展提示使用
                "../"
            ],
            "options": {
                "cwd": "${workspaceFolder}/build",
            },
            "dependsOn": [
                "Build_dir" // 在task `build_dir` 后執行該task
            ]
        },



        { // 在build文件夾中調用cmake編譯構建debug程序
            // 執行的命令為`cmake --build ./ --target all --`
            //  windows系統如上需要在visual stuido的環境中執行命令
            "label": "Build",
            "group": "test",
            "type": "shell",
            "command": "cmake",
            "args": [
                "--build",
                "./",
                "--target",
                "all",
                "--"
            ],
            "options": {
                "cwd": "${workspaceFolder}/build",
            },
            "problemMatcher": "$gcc",
            "dependsOn": [
                "Cmake" // 在task `cmake` 后執行該task
            ]
        },
        {
            "label": "Run",
            "type": "shell",
            "group":"build",
            
            "command":"./${workspaceFolderBasename}",
            "options": {
                "cwd": "${workspaceFolder}/build",
            },
            "dependsOn":[
                "Build"
            ]
        },
    ],
    "inputs": [
        {
            "id": "CMAKE_BUILD_TYPE",
            "type": "pickString",
            "description": "What CMAKE_BUILD_TYPE do you want to create?",
            "options": [
                "Debug",
                "Release",
                "RelWithDebInfo",
                "MinSizeRel",
            ],
            "default": "Debug"
        },
        {
            "id": "PLATFORM",
            "type": "pickString",
            "description": "What PLATFORM do you want to create?",
            "options": [
                "x86",
                "amd64",
                "arm",
                "x86_arm",
                "x86_amd64",
                "amd64_x86",
                "amd64_arm",
            ],
            "default": "amd64"
        },
        {
            "id": "vcvars_ver",
            "type": "pickString",
            "description": "What vcvars_ver do you want to create?",
            "options": [
                "14.2", // 2019
                "14.1", // 2017
                "14.0", // 2015
            ],
            "default": "14.2"
        }
    ]
}
  1. 新建launch.json:
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/${workspaceFolderBasename}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "preLaunchTask": "build",
            "environment": [],
            "externalConsole": false,
            "osx": {
                "MIMode": "lldb"
            },
            "linux": {
                "MIMode": "gdb",
                "setupCommands": [
                    {
                        "description": "Enable pretty-printing for gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ]
            },
            "windows": {
                "program": "${workspaceFolder}/build/${workspaceFolderBasename}"
            },
        }
    ]
}

  1. 新建settings.json:
{
    "files.associations": {
        "ostream": "cpp",
        "vector": "cpp"
    },
    "C_Cpp.errorSquiggles": "Disabled"
}
  • 建立項目,目錄如下:
.(我的測試項目名稱為qt_cmake_basic)
├── CMakeLists.txt
├── CMakeLists.txt.user
├── build
│   ├── CMakeCache.txt
│   └── CMakeFiles
├── include
│   └── Testhead.h
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── mainwindow.ui
└── src
    ├── CMakeLists.txt
    └── Testhead.cpp

CMakeLists.txt文件除了使用Qt創建新項目的時候生成的那部分之外,可以在開源項目上找一些CMakeLists.txt文件借鑒學習一下,稍微改動一下就可以做出架構類似的項目。

我的測試項目架構大致如上。其中/src中的CMakeLists.txt文件內容如下:

set(FILENAME_SOURCE_FILES
    Testhead.cpp
#   這里添加src目錄下的.cpp文件
)
set(FILENAME_HEADER_FILES
    ../include/Testhead.h
#   這里添加include目錄下的頭文件      
)
#   src_head是自己定義的名稱,為項目提供鏈接庫
add_library(src_head STATIC ${FILENAME_SOURCE_FILES} ${FILENAME_HEADER_FILES})
target_include_directories(src_head PUBLIC ../include)

與main.cpp同級的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.5)

project(qt_cmake_basic VERSION 0.1 LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check https://doc.qt.io/qt/deployment-android.html for more information.
# They need to be set before the find_package( ...) calls below.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)

set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(qt_cmake_basic
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
else()
    if(ANDROID)
        add_library(qt_cmake_basic SHARED
            ${PROJECT_SOURCES}
        )
    else()
        add_executable(qt_cmake_basic
            ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(qt_cmake_basic PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

set_target_properties(qt_cmake_basic PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)
if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(qt_cmake_basic)
endif()
#上面的是Qt項目生成時建立的默認CMakeLists.txt

add_subdirectory(src)
target_include_directories(qt_cmake_basic PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(qt_cmake_basic PUBLIC src_head)
  • 最后command+R即可生成+運行項目。

參考資料:

https://blog.csdn.net/weixin_43669941/article/details/108921714

https://blog.csdn.net/qq_33756749/article/details/114175291

https://blog.csdn.net/weixin_42221830/article/details/111245894

https://blog.csdn.net/weixin_43669941/article/details/108921714


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM