欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > cmake 之 check_language()

cmake 之 check_language()

2025/3/19 9:39:21 来源:https://blog.csdn.net/eloudy/article/details/146344368  浏览:    关键词:cmake 之 check_language()

1,check_language 的定义

定义出现在cmake 源代码的 Modules/文件夹下边:

例如:

cmake-3.29.2/Modules/CheckLanguage.cmake

大致具体内容如下:


include_guard(GLOBAL)block(SCOPE_FOR POLICIES)
cmake_policy(SET CMP0126 NEW)macro(check_language lang)if(NOT DEFINED CMAKE_${lang}_COMPILER)set(_desc "Looking for a ${lang} compiler")message(CHECK_START "${_desc}")message(STATUS "LLLLLLLL")file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})set(extra_compiler_variables)if("${lang}" MATCHES "^(CUDA|HIP)$" AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")set(extra_compiler_variables "set(CMAKE_${lang}_HOST_COMPILER \\\"\${CMAKE_${lang}_HOST_COMPILER}\\\")")endif()if("${lang}" STREQUAL "HIP")list(APPEND extra_compiler_variables "set(CMAKE_${lang}_PLATFORM \\\"\${CMAKE_${lang}_PLATFORM}\\\")")endif()list(TRANSFORM extra_compiler_variables PREPEND "\"")list(TRANSFORM extra_compiler_variables APPEND "\\n\"")list(JOIN extra_compiler_variables "\n  " extra_compiler_variables)set(_cl_content"cmake_minimum_required(VERSION ${CMAKE_VERSION})
project(Check${lang} ${lang})
file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\"\"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\"${extra_compiler_variables})")file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt""${_cl_content}")if(CMAKE_GENERATOR_INSTANCE)set(_D_CMAKE_GENERATOR_INSTANCE "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}")else()set(_D_CMAKE_GENERATOR_INSTANCE "")endif()if(CMAKE_GENERATOR MATCHES "^(Xcode$|Green Hills MULTI$|Visual Studio)")set(_D_CMAKE_MAKE_PROGRAM "")else()set(_D_CMAKE_MAKE_PROGRAM "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}")endif()if(CMAKE_TOOLCHAIN_FILE)set(_D_CMAKE_TOOLCHAIN_FILE "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}")else()set(_D_CMAKE_TOOLCHAIN_FILE "")endif()if(CMAKE_${lang}_PLATFORM)set(_D_CMAKE_LANG_PLATFORM "-DCMAKE_${lang}_PLATFORM:STRING=${CMAKE_${lang}_PLATFORM}")else()set(_D_CMAKE_LANG_PLATFORM "")endif()execute_process(WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}COMMAND ${CMAKE_COMMAND} . -G ${CMAKE_GENERATOR}-A "${CMAKE_GENERATOR_PLATFORM}"-T "${CMAKE_GENERATOR_TOOLSET}"${_D_CMAKE_GENERATOR_INSTANCE}${_D_CMAKE_MAKE_PROGRAM}${_D_CMAKE_TOOLCHAIN_FILE}${_D_CMAKE_LANG_PLATFORM}OUTPUT_VARIABLE _cl_outputERROR_VARIABLE _cl_outputRESULT_VARIABLE _cl_result)include(${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/result.cmake OPTIONAL)if(CMAKE_${lang}_COMPILER AND "${_cl_result}" STREQUAL "0")message(CONFIGURE_LOG"${_desc} passed with the following output:\n""${_cl_output}\n")set(_CHECK_COMPILER_STATUS CHECK_PASS)else()set(CMAKE_${lang}_COMPILER NOTFOUND)set(_CHECK_COMPILER_STATUS CHECK_FAIL)message(CONFIGURE_LOG"${_desc} failed with the following output:\n""${_cl_output}\n")endif()message(${_CHECK_COMPILER_STATUS} "${CMAKE_${lang}_COMPILER}")set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE FILEPATH "${lang} compiler")mark_as_advanced(CMAKE_${lang}_COMPILER)if(CMAKE_${lang}_HOST_COMPILER)message(STATUS "Looking for a ${lang} host compiler - ${CMAKE_${lang}_HOST_COMPILER}")set(CMAKE_${lang}_HOST_COMPILER "${CMAKE_${lang}_HOST_COMPILER}" CACHE FILEPATH "${lang} host compiler")mark_as_advanced(CMAKE_${lang}_HOST_COMPILER)endif()if(CMAKE_${lang}_PLATFORM)set(CMAKE_${lang}_PLATFORM "${CMAKE_${lang}_PLATFORM}" CACHE STRING "${lang} platform")mark_as_advanced(CMAKE_${lang}_PLATFORM)endif()endif()
endmacro()endblock()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词