如何告诉CMake将所有cpp文件编译为CUDA源

问题描述 投票:0回答:1

我有一个包含许多 .cpp 文件的项目。 主要用于测试,我喜欢将这些.cpp文件编译为CUDA文件。

我可以像each文件一样覆盖CMake自动检测到的语言。

... loop of ${TEST_FILE} (from a list list of cpp files)
        set(TEST_EXE "${TEST_FILE}.x")
        add_executable(${TEST_EXE} ${TEST_FILE})

        if(ENABLE_CUDA)
            set_source_files_properties(${TEST_FILE} PROPERTIES LANGUAGE CUDA)
        endif()
...

是否有一个全局设置,我可以通过它告诉 CMake 编译

.cpp
文件,就像它们是
.cu
(CUDA)源一样?

有一个相关问题,如何使用 CMake 将 C++ 编译为 CUDA,但它仅回答单个或显式文件列表(必须在长子目录嵌套 CMake 文件的所有位置中

set_source_file_properties
)。

c++ cmake cuda
1个回答
0
投票

虽然 CMake 中没有直接的全局设置来强制将所有 .cpp 文件编译为 CUDA,但您可以使用 CMakeLists.txt 中的 CMake 循环来实现此行为。这是一种结合了两种方法优点的改进方法:

CMake
cmake_minimum_required(VERSION 3.0)
project(my_project)

# Enable CUDA compilation for all source files
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11")
set(CMAKE_CXX_STANDARD 11)

# Find CUDA libraries
find_package(CUDA REQUIRED)

# Include CUDA targets
include_directories(${CUDA_INCLUDE_DIRS})

# Loop through all source files with .cpp extension
file(GLOB SOURCE_FILES "*.cpp")

# Set CUDA language for all source files
foreach(SOURCE_FILE ${SOURCE_FILES})
  set_source_files_properties(${SOURCE_FILE} PROPERTIES LANGUAGE CUDA)
endforeach()

# Add executables from source files (optional)
# You can modify this part to create executables or libraries as needed
foreach(SOURCE_FILE ${SOURCE_FILES})
  get_filename_component(TEST_NAME ${SOURCE_FILE} NAME_WE)
  set(TEST_EXE "${TEST_NAME}.x")
  add_executable(${TEST_EXE} ${SOURCE_FILE})
  target_link_libraries(${TEST_EXE} cuda)
endforeach()
© www.soinside.com 2019 - 2024. All rights reserved.