c++ - 未知的 CMake 命令 "check_language"

标签 c++ cmake

我有一个包含“普通”代码和 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)

尽管如此,我还是收到了错误

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

即使我在 3.17.2 版本中有 cmake。为什么会这样?我怎样才能继续使用这张支票?或者我必须诉诸不同的解决方案?

当然,如果我切换出该 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)

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)

它有效,但我打算使用建议的方法,而不是已弃用的版本。

最佳答案

添加CheckLanguage模块添加到 CMakeLists.txt 文件中,以将 enable_languageinclude(CheckLanguage) 结合使用。

As Tsyvarev posted here

关于c++ - 未知的 CMake 命令 "check_language",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61952169/

相关文章:

c++ - 我应该在 C++ 中公开迭代器和适配器方法还是整个容器?

c++ - 错误 "C1083 cannot open include file gecode/int.hh"尽管路径设置正确

opencv - 使用cmake错误构建opencv

c++ - 在同一台计算机上运行多个版本的 OpenCV

CMake:如何将 INTERFACE_INCLUDE_DIRECTORIES 与 ExternalProject 一起使用?

c++ - 如何为结构 vector 重载 <<

c++ - 如何使用C++生成音频wav文件的波形

C++头文件解析

cmake - 使用 Makefile 项目时出错

c++ - 构建 sfml 时 Cmake 未链接