Cmake 混合编译c++和Cuda(cuda7.5 + vs2010)

2024年9月20日13:45:40

  • Cmake版本3.23.4
  • VS2010的编译器、连接器
  • CUDa 7.5

image-20240920144744947

CmakeList.txt文件必须这样写:

cmake_minimum_required(VERSION 3.10)

# 项目信息
project(projectname LANGUAGES CXX CUDA)

set(CMAKE_CXX_FLAGS_RELEASE "/Zi /Od")  # 设置 C++ 编译器标志
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG /OPT:REF /OPT:ICF /NODEFAULTLIB:libcpmt.lib /NODEFAULTLIB:LIBCMT.lib") # 设置链接器标志
set(CMAKE_CXX_STANDARD 11) # 设置C++标准
set(CMAKE_CXX_STANDARD_REQUIRED True)


link_directories(
        "${}/bin"
        "${}/lib/"               
)

# 包含目录
include_directories(
        "."
        "C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include"
        "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/include"
        "..."
)

# 源文件
set(SOURCES
        main.cpp
        "..."
)

# CUDA 源文件
set(CUDA_SOURCES
        ../xxx.cu
        ../xxx.cuh
        ../xxx.cu
        ../xxx.cuh        

)

# 添加可执行文件
add_executable(${PROJECT_NAME} ${SOURCES} ${CUDA_SOURCES})

# 链接库
target_link_libraries(${PROJECT_NAME} cudart kernel32 user32 xxx ...)

# 设置编译选项
target_compile_options(${PROJECT_NAME} PRIVATE
        $<$<CONFIG:Debug>:-DWIN64 -D_DEBUG>
        $<$<CONFIG:Release>:-DWIN64 -DNDEBUG>
)

## 设置链接选项,注释掉依旧可以正常出图
target_link_options(${PROJECT_NAME} PRIVATE
        $<$<CONFIG:Debug>:-generate-debug-information>
        $<$<CONFIG:Release>:-generate-debug-information -enable-comdat-folding -optimize-references>
)

# CUDA 编译选项  把这个注释掉,核函数就进不去了   非常重要,不要用 find_package(cuda),而要用这个!!!
set_target_properties(${PROJECT_NAME} PROPERTIES
        CUDA_ARCHITECTURES "35"
)

SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${URT_EXE_OUTPUT}")
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${URT_EXE_OUTPUT}")

Cmake的命令行参数必须这样写

-DCMAKE_WARN_VS10=OFF -DCMAKE_GENERATOR_PLATFORM=x64

ToolChain必须这样配置

image-20240920134439933

以上的cmake配置 可以顺利地 进行混合编译C++ 和Cuda!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐