我有一个包含“普通”代码和 CUDA 代码的项目。整个项目由cmake管理。现在,根据目标计算机上 CUDA 的可用性,我希望能够打开和关闭 CUDA 文件。为此,我打算使用 CMake 命令“ check_language”,并在以下CMakeLists文件中实现它:
cmake_minimum_required(VERSION 3.17)
set(PROJECT_NAME "Hello_World_with_CUDA")
set(PROJECT_VERSION 1.0.0)
project(${PROJECT_NAME} VERSION ${PROJECT_VERSION} DESCRIPTION "UPPE pulse propagation library" LANGUAGES CXX)
include(GNUInstallDirs)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
enable_language(CUDA)
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
add_compile_definitions(USE_CUDA)
else(CMAKE_CUDA_COMPILER)
message(STATUS "No CUDA support")
remove_definitions(USE_CUDA)
endif(CMAKE_CUDA_COMPILER)
cmake_policy (SET CMP0074 NEW)
set(PROJECT_SRC source/main.cpp source/test.cu)
set(PROJECT_INC include/test.hpp)
set(PROJECT_SRC ${PROJECT_SRC}
${PROJECT_INC})
add_executable(${PROJECT_NAME}
${PROJECT_SRC})
target_include_directories(${PROJECT_NAME} PRIVATE
include)
Run Code Online (Sandbox Code Playgroud)
尽管如此,我还是收到了错误
CMake Error at CMakeLists.txt:17 (check_language):
Unknown CMake command "check_language".
Run Code Online (Sandbox Code Playgroud)
即使我cmake在版本中有3.17.2。为什么会这样?我怎样才能继续使用这张支票?或者我必须诉诸不同的解决方案?
当然,如果我把这个块关掉
check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
enable_language(CUDA)
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
add_compile_definitions(USE_CUDA)
else(CMAKE_CUDA_COMPILER)
message(STATUS "No CUDA support")
remove_definitions(USE_CUDA)
endif(CMAKE_CUDA_COMPILER)
Run Code Online (Sandbox Code Playgroud)
和
find_package(CUDA QUIET)
if(CUDA_FOUND)
enable_language(CUDA)
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
add_compile_definitions(USE_CUDA)
else(CUDA_FOUND)
message(STATUS "No CUDA support")
remove_definitions(USE_CUDA)
endif(CUDA_FOUND)
Run Code Online (Sandbox Code Playgroud)
它有效,但我打算使用建议的方法,而不是已弃用的版本。