QT6+cmake+cuda的构建(windows)

文章目录

  • [1. 环境准备](#1. 环境准备)
  • [2. 项目结构](#2. 项目结构)
  • [3. 测试代码编写](#3. 测试代码编写)
    • [3.1 kernel.h](#3.1 kernel.h)
    • [3.2 kernel.cu](#3.2 kernel.cu)
    • [3.3 main.cpp](#3.3 main.cpp)
    • [3.4 CMakeLists.txt](#3.4 CMakeLists.txt)
  • [4. 编译结果](#4. 编译结果)

1. 环境准备

  1. QT6
  2. CUDA Toolkit
  3. cmake >= 3.8
  4. 编译器支持cuda
    -Windows: MSVC(visual studio)或MinGW-w64(有限支持,建议MSVC)

2. 项目结构

cmake 复制代码
cudaTest/
├──CmakeLists.txt
├──main.cpp
├──kernel.cu
└──kernel.h

3. 测试代码编写

3.1 kernel.h

c 复制代码
// kernel.h
#ifndef KERNEL_H
#define KERNEL_H

void launch_kernel();

#endif // KERNEL_H

3.2 kernel.cu

c 复制代码
// kernel.cu
#include "kernel.h"
#include <cuda_runtime.h>
#include <iostream>

__global__ void hello_kernel() {
    printf("Hello from GPU thread %d\n", threadIdx.x);
}

void launch_kernel() {
    hello_kernel<<<1, 10>>>();
    cudaDeviceSynchronize();
    cudaError_t err = cudaGetLastError();
    if (err != cudaSuccess) {
        std::cerr << "CUDA error: " << cudaGetErrorString(err) << std::endl;
    }
}

3.3 main.cpp

cpp 复制代码
// main.cpp
#include <QApplication>
#include <QLabel>
#include "kernel.h"

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    launch_kernel();  // 调用 CUDA 内核

    QLabel label("Hello Qt + CUDA!");
    label.show();

    return app.exec();
}

3.4 CMakeLists.txt

cmake 复制代码
cmake_minimum_required(VERSION 3.24)  # 推荐 3.24+ 以获得更好的 CUDA 支持

##############################【修改1】新增cuda编译环境##########################
project(MyQtCudaApp LANGUAGES CXX CUDA)
###############################################################################

# 启用 Qt6
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

# 查找 Qt6 组件
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Gui)


##############################【修改2】新增cuda编译环境##########################
# 查找 CUDA(通常 CMake 自动处理,但显式声明更清晰)
enable_language(CUDA)

# 设置 CUDA 架构(根据你的 GPU 调整)
set(CMAKE_CUDA_ARCHITECTURES "75;86")  # 例如:RTX 20xx=75, RTX 30xx=86
###############################################################################


# 添加可执行文件(包含 .cpp 和 .cu)
add_executable(MyQtCudaApp
    main.cpp
    kernel.cu
)

# 链接 Qt6 库
target_link_libraries(MyQtCudaApp PRIVATE
    Qt6::Core
    Qt6::Widgets
    Qt6::Gui
)

# 设置 C++ 标准
set_target_properties(MyQtCudaApp PROPERTIES
    CXX_STANDARD 17
    CUDA_STANDARD 17
)

##############################【修改3】可选,新增cuda编译环境#####################
# 可选:设置 NVCC 编译选项
target_compile_options(MyQtCudaApp PRIVATE
    $<$<COMPILE_LANGUAGE:CUDA>:--extended-lambda>
    $<$<COMPILE_LANGUAGE:CUDA>:--expt-relaxed-constexpr>
)
###############################################################################

4. 编译结果

  • 代码可正常编辑
  • .cu代码会出现部分假错误,目前解决办法未继续探索(据查,是cuda和qt兼容性弱的原因)
    拟解决办法:在visual studio上编写cuda相关代码,验证正确后带入qt写界面进行测试
相关推荐
非鱼䲆鱻䲜3 天前
vscode开发stm32添加新的头文件路径和包含源文件
ide·vscode·stm32·cmake·包含头文件·包含源文件
特立独行的猫a4 天前
CMake与GN构建系统对比及GN使用指南
harmonyos·cmake·openharmony·构建·gn
特立独行的猫a5 天前
海思WS63平台CMake构建系统使用指南
cmake·海思·ws63·fbb_ws63
阿拉斯攀登5 天前
【RK3576 安卓 JNI/NDK 系列 05】NDK 构建系统:CMakeLists.txt 从入门到精通
cmake·rk3568·瑞芯微·rk安卓驱动·安卓jni·ndk构建系统
茉莉玫瑰花茶5 天前
CMake 工程指南 - 工程场景(4)
服务器·c++·cmake
茉莉玫瑰花茶5 天前
CMake 工程指南 - 工程场景(5)
开发语言·c++·cmake
Laurence7 天前
CMake 查找、打印 Qt 所有 Components / 模块列表
开发语言·qt·cmake·打印·查找·所有组件·所有模块
梓䈑8 天前
【CMake】CMake工程构建全流程 以及 相关命令行工具的介绍
linux·cmake
Laurence8 天前
CMake 报错 Failed to find required Qt component WebEngineWidgets
qt·webengine·cmake·找不到
学编程的闹钟1 个月前
安装GmSSL3库后用VS编译CMake源码
c语言·c++·ide·开发工具·cmake·visual studio