我正在尝试在使用 CMake 的现有 C++ 项目中添加 CUDA 函数。
例如,main.cpp看起来像这样:
#include <stdio.h>
#include "kernels/test.cuh"
int main() {
wrap_test_print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
看起来kernels/test.cu像:
#include "test.cuh"
__global__ void test_print(){
printf("Hello World!\n");
}
void wrap_test_print() {
test_print<<<1, 1>>>();
return;
}
Run Code Online (Sandbox Code Playgroud)
看起来kernels/test.cuh像:
#ifndef TEST_CUH__
#define TEST_CUH__
#include <stdio.h>
void wrap_test_print();
#endif
Run Code Online (Sandbox Code Playgroud)
我使用以下代码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)
Run Code Online (Sandbox Code Playgroud)
但是,当我在项目中的文件夹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
Run Code Online (Sandbox Code Playgroud)
我猜这是由于cudart问题造成的,所以我添加了set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lcudart")但无法解决这个问题。我该如何解决这个问题?
将我的评论变成答案:
该project()命令将初始化许多与您的系统和编译器相关的 CMake 变量。因此,它设置您的 CMake 项目将使用的语言。如果不在命令中指定任何语言,则启用project()默认值 (C和):CXX
# Initialize for C and C++ languages.
project(cmake_and_cuda)
Run Code Online (Sandbox Code Playgroud)
通常,您应该将第一个project()命令直接放在cmake_minimum_required()调用之后,以避免此类错误。这enable_language()是一个轻量级调用,通常用于稍后在 CMake 项目中启用更多语言。因此,您应该重新安排 CMake 文件以在调用之后进行调用,enable_language()以便CMakeproject()正确初始化其内部变量。
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)
Run Code Online (Sandbox Code Playgroud)
或者,只需在命令本身中启用 CMake 项目所需的所有语言project():
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
# Initialize for C++ and CUDA languages.
project(cmake_and_cuda LANGUAGES CXX CUDA)
Run Code Online (Sandbox Code Playgroud)
注意:enable_language()和project()命令的语言适用于其下面的所有 CMake 目录,因此无需enable_language()在子目录中再次调用。
| 归档时间: |
|
| 查看次数: |
8774 次 |
| 最近记录: |