gpt4 book ai didi

cmake - 使用 CMake 编译带有 CUDA 代码的 C++

转载 作者:行者123 更新时间:2023-12-03 23:06:42 26 4
gpt4 key购买 nike

我正在尝试在使用 CMake 的现有 C++ 项目中添加 CUDA 函数。

例如,main.cpp 看起来像这样:

#include <stdio.h>
#include "kernels/test.cuh"

int main() {
wrap_test_print();
return 0;
}
kernels/test.cu 看起来像:
#include "test.cuh"
__global__ void test_print(){
printf("Hello World!\n");
}

void wrap_test_print() {
test_print<<<1, 1>>>();
return;
}
kernels/test.cuh 看起来像:
#ifndef TEST_CUH__
#define TEST_CUH__

#include <stdio.h>

void wrap_test_print();

#endif

我对 CMakeLists.txt 使用以下代码:
===============
CMakeLists.txt
===============
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
enable_language(CUDA)
project(cmake_and_cuda)

add_executable(main main.cpp)
add_subdirectory(kernels)

# set_property(TARGET main
# PROPERTY CUDA_SEPARABLE_COMPILATION ON)
target_link_libraries(main kernels)

===============
kernels/CMakeLists.txt
===============
enable_language(CUDA)
add_library(kernels
test.cu
test.cuh
)
target_compile_features(kernels PUBLIC cxx_std_11)
set_target_properties(kernels
PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
target_link_libraries(kernels)


但是,当我在项目中的 cmake .. 文件夹中使用 build 时,会打印以下错误消息:
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.
Missing variable is:
CMAKE_CUDA_DEVICE_LINK_LIBRARY
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.
Missing variable is:
CMAKE_CUDA_DEVICE_LINK_LIBRARY

我猜这是由于 cudart 问题,所以我添加了 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lcudart") 但我无法解决这个问题。我该如何解决这个问题?

最佳答案

把我的评论变成答案:

project() 命令将初始化许多与您的系统和编译器有关的 CMake 变量。因此,它设置了您的 CMake 项目将使用的 语言 。在 project() 命令中没有指定任何语言,默认值( CCXX )被启用:

# Initialize for C and C++ languages.
project(cmake_and_cuda)

您通常应该在 project() 调用之后直接放置第一个 cmake_minimum_required() 命令,以避免此类错误。 enable_language() 是一个轻量级调用,通常用于稍后在 CMake 项目中启用更多语言。因此,您应该重新安排 CMake 文件,将 enable_language() 调用放在 project() 调用之后,以便 CMake 正确初始化其内部变量。
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
# Initialize for C and C++ languages.
project(cmake_and_cuda)
# Also, enable CUDA language support.
enable_language(CUDA)

或者,只需在 project() 命令本身中启用您的 CMake 项目所需的所有语言:
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
# Initialize for C++ and CUDA languages.
project(cmake_and_cuda LANGUAGES CXX CUDA)

注意: enable_language()project() 命令的语言适用于其下的所有 CMake 目录,因此无需在子目录中再次调用 enable_language()

关于cmake - 使用 CMake 编译带有 CUDA 代码的 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62139760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com