首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未知CMake命令"check_language“

未知CMake命令"check_language“
EN

Stack Overflow用户
提问于 2020-05-22 09:44:52
回答 1查看 888关注 0票数 2

我有一个项目,包含“正常”代码和数据自动化系统代码。整个项目由cmake管理。现在,根据CUDA在目标机器上的可用性,我希望能够打开和关闭CUDA文件。为此,我打算使用CMake命令"check_language",并在以下CMakeLists-file中实现它:

代码语言:javascript
运行
复制
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)

尽管如此,我还是发现了错误

代码语言:javascript
运行
复制
CMake Error at CMakeLists.txt:17 (check_language):
  Unknown CMake command "check_language".

即使我在3.17.2版本中使用了3.17.2。为什么,我怎么还能用那张支票?还是我必须求助于不同的解决方案?

当然,如果我换掉那块

代码语言:javascript
运行
复制
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)

使用

代码语言:javascript
运行
复制
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)

它可以工作,但我打算使用建议的方法,而不是不推荐的版本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-12 18:49:24

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

https://stackoverflow.com/questions/61952169/unknown-cmake-command-check-language#comment109573780_61952169

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61952169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档