Unknown CMake command "check_language"

Viewed 808

I have a project containing both "normal" code and CUDA code. The whole project is managed by cmake. Now, depending on the availability of CUDA on the target machine I would like to be able to switch the CUDA-files on and off. For that, I intended to use the CMake-command "check_language", and implemented it in the following CMakeLists-file:

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)

Nevertheless, I get the error

CMake Error at CMakeLists.txt:17 (check_language):
  Unknown CMake command "check_language".

even though I have cmake in the version 3.17.2. Why that, and how can I still use that check? Or do I have to resort to different solutions?

Of course, if I switch out the block

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)

with

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)

it works, but I intended to use the suggested approach, not the deprecated version.

1 Answers
Related