在CMake中添加对新编译器供应商的支持(交叉编译)
我想使用toolchain和CMake交叉编译一个嵌入式应用程序(3.16还可以) 我从一个完整的工具链文件开始,其中指定了二进制文件和规则的所有路径,但随后我阅读并使用在CMake中添加对新编译器供应商的支持(交叉编译),cmake,cross-compiling,cmake-modules,Cmake,Cross Compiling,Cmake Modules,我想使用toolchain和CMake交叉编译一个嵌入式应用程序(3.16还可以) 我从一个完整的工具链文件开始,其中指定了二进制文件和规则的所有路径,但随后我阅读并使用编译器/IAR*脚本作为示例()以更简洁的方式结束 我知道,默认情况下,在C/CXX项目中,CMake尝试编译一个简单的测试程序CMakeCCompilerId.C,以检测编译器id供应商和版本。我创建了自己的任务确定编译器.cmake,它将使用ctc编译器定义的符号。但是,即使该文件由CMake执行(检测到其中的语法错误),它
编译器/IAR*
脚本作为示例()以更简洁的方式结束
我知道,默认情况下,在C/CXX项目中,CMake尝试编译一个简单的测试程序CMakeCCompilerId.C
,以检测编译器id供应商和版本。我创建了自己的任务确定编译器.cmake
,它将使用ctc编译器定义的符号。但是,即使该文件由CMake执行(检测到其中的语法错误),它似乎对生成的测试源文件没有任何影响
这意味着编译器标识的默认机制不适用于我的编译器,我得到消息“C编译器标识未知”。在我的工具链文件中,我需要强制标识:
set(CMAKE_SYSTEM_NAME Generic)
# will load Platform/Generic.cmake under CMAKE_MODULE_PATH
# Normalize, convert Windows backslashes to forward slashes or CMake will crash
get_filename_component(TASKING_ROOT_PATH "$ENV{TASKING_TRICORE_PATH}" ABSOLUTE)
# Specify the compiler
# will load Platform/Generic-ctc.cmake CMAKE_MODULE_PATH
foreach (_prefix C CXX)
if ("${CMAKE_${_prefix}_COMPILER}" STREQUAL "")
set(CMAKE_${_prefix}_COMPILER "${TASKING_ROOT_PATH}/bin/cctc.exe")
endif()
# This is used only if we skip auto compiler identification
set(CMAKE_${_prefix}_COMPILER_ID "Tasking")
set(CMAKE_${_prefix}_COMPILER_VERSION "6.3.1r1")
# Skip compiler ID identification: use "Tasking"
set(CMAKE_${_prefix}_COMPILER_ID_RUN TRUE)
set(CMAKE_${_prefix}_COMPILER_FORCED TRUE)
endforeach()
# will load Compiler/Tasking.cmake under CMAKE_MODULE_PATH
# and Compiler/Tasking-FindBinUtils.cmake as well
到目前为止,这是可行的,但我想了解是否可以使用默认的CMake方法来标识编译器id和版本。我找不到如何在文档中添加其他供应商
非常感谢