You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置CMake移除特定编译器默认编译命令中的-c选项?

问题

兼容GCC的编译器通常使用-c选项实现仅编译不链接,但TASKING TriCore编译器的-c选项作用是指定C标准(详见其官方文档第280页),因此无法兼容该用法。我已通过工具链文件指定TASKING编译器,配置代码如下:

set(CMAKE_C_COMPILER "${AURIX_SDK_ROOT}/bin/ctc" CACHE INTERNAL "")
set(CMAKE_CXX_COMPILER "${AURIX_SDK_ROOT}/bin/cptc" CACHE INTERNAL "")

foreach (_prefix C CXX)
    # 跳过自动编译器识别,强制指定为Tasking
    set(CMAKE_${_prefix}_COMPILER_ID "Tasking")
    set(CMAKE_${_prefix}_COMPILER_VERSION "6.3r1")

    set(CMAKE_${_prefix}_COMPILER_ID_RUN TRUE CACHE INTERNAL "")
    set(CMAKE_${_prefix}_COMPILER_FORCED TRUE CACHE INTERNAL "")
    set(CMAKE_${_prefix}_COMPILER_WORKS TRUE CACHE INTERNAL "")
endforeach()

set(CMAKE_AR "${AURIX_SDK_ROOT}/bin/artc")
set(CMAKE_ASM_COMPILER  "${AURIX_SDK_ROOT}/bin/astc")
set(CMAKE_LINKER  "${AURIX_SDK_ROOT}/bin/ltc")

# 交叉编译路径配置
set(CMAKE_FIND_ROOT_PATH ${AURIX_SDK_ROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

请问在CMake 3.16及以上版本中,如何配置才能让CMake不再使用-c选项?

版本信息

  • CMake 版本 ≥3.16
  • TASKING VX-toolset for TriCore v6.3r1
解决方案

CMake通过CMAKE_<LANG>_COMPILE_OBJECT变量定义编译源文件为目标文件的命令模板,默认GCC类编译器的模板包含-c选项。要适配TASKING编译器,需手动覆盖该变量,替换为TASKING对应的仅编译选项:

在工具链文件的foreach (_prefix C CXX)循环内(或循环后)添加以下配置:

foreach (_prefix C CXX)
    # 原有配置...
    
    # 重新定义编译命令模板,移除默认的 -c,改用TASKING的-compile选项
    set(CMAKE_${_prefix}_COMPILE_OBJECT 
        "<CMAKE_${_prefix}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -compile <SOURCE> -o <OBJECT>"
        CACHE INTERNAL "")
endforeach()

说明

  • CMAKE_<LANG>_COMPILE_OBJECT是CMake控制编译目标文件的核心变量,模板中的占位符(如<SOURCE>、<OBJECT>)会被CMake自动替换为实际文件路径
  • TASKING编译器使用-compile选项实现仅编译不链接(若实际选项与文档不符,请以TASKING官方文档为准调整)
  • 该配置会强制CMake生成符合TASKING要求的编译命令,不再使用-c选项

内容的提问来源于stack exchange,提问作者ilya1725

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:06:04