cmake如何添加cu和cuh文件?
在CMake中,添加.cu
和.cuh
文件与添加普通的.cpp
和.h
文件类似。.cu
文件是NVIDIA CUDA编程的源文件,而.cuh
文件是CUDA的头文件。为了编译这些文件,你需要确保你的系统中安装了NVIDIA的CUDA工具包,并且CMake能够找到CUDA编译器。
以下是一个简单的示例,展示如何在CMake中添加.cu
和.cuh
文件:
首先,确保你的项目根目录中的CMakeLists.txt
文件包含了CUDA的相关设置和编译规则。这通常包括找到CUDA工具包、设置CUDA编译器和指定CUDA的架构。
cmake_minimum_required(VERSION 3.0)
project(MyCudaProject)
# Find the CUDA toolkit
find_package(CUDA REQUIRED)
# Set the CUDA architecture flags
set(CUDA_ARCHITECTURES "35;50;60;61;70;75") # Example architectures, adjust as needed
# Add the CUDA source files
add_executable(my_cuda_program main.cu)
target_sources(my_cuda_program PRIVATE
${PROJECT_SOURCE_DIR}/src/kernel.cu
${PROJECT_SOURCE_DIR}/include/kernel.cuh
)
# Link against CUDA libraries (e.g., cublas, cudart, etc.)
target_link_libraries(my_cuda_program ${CUDA_LIBRARIES})
# Set CUDA compilation flags
set_target_properties(my_cuda_program PROPERTIES
COMPILE_FLAGS "-arch=sm_${CUDA_ARCHITECTURES}"
)
在这个例子中,add_executable
命令用于添加一个可执行文件,并指定了CUDA源文件main.cu
。target_sources
命令用于向目标添加额外的源文件,包括.cu
和.cuh
文件。${PROJECT_SOURCE_DIR}
是一个变量,表示项目的根目录,因此你需要根据你的项目结构来调整路径。
target_link_libraries
命令用于链接CUDA库。在这个例子中,${CUDA_LIBRARIES}
包含了所有必要的CUDA库。
set_target_properties
命令用于设置目标的编译标志,包括CUDA架构标志(-arch=sm_...
),这些标志告诉CUDA编译器为哪些GPU架构生成代码。
请确保你的.cu
和.cuh
文件位于正确的位置,并且路径在CMakeLists.txt
文件中正确指定。如果你的项目结构更加复杂,你可能需要为不同的子目录创建单独的CMakeLists.txt
文件,并在其中添加相应的源文件。
此外,如果你的项目中有多个CUDA源文件或头文件,你可以使用file(GLOB ...)
命令来自动收集它们,但这通常不是推荐的做法,因为它可能会导致不必要的重新编译。最好显式地列出你的源文件。