我有一个包含许多 .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
)。
虽然 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()