Как удалить параметр из шаблона команды компиляции по умолчанию для определенного компилятора?

Любой нормальныйgccсовместимый компилятор указывает исходный файл с опцией (компилировать, но не связывать). Мне приходится иметь дело с компилятором Tasking, которому эта опция не нравится. Опция для этого компилятора TASKING указывает стандарт C (стр. 280) указывает стандарт C. Я использовал обычный способ указать компилятор с помощью файла набора инструментов:

      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)
    # set(CMAKE_${_prefix}_COMPILER "${AURIX_SDK_ROOT}/bin/cctc")
    # This is used only if we skip auto compiler identification
    set(CMAKE_${_prefix}_COMPILER_ID "Tasking")
    set(CMAKE_${_prefix}_COMPILER_VERSION "6.3r1")

    # Skip compiler ID identification: use "Tasking"
    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 "")
    SET(CMAKE_${_prefix}_COMPILER_FORCED TRUE CACHE INTERNAL "")
    SET(CMAKE_${_prefix}_COMPILER_ID_RUN 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")

# Search paths for libraries
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), чтобы он не использовал-cвариант? я указалCMAKE_CCOMPILER_IDкак «Задание».

Версии:

  • Смейк > 3,16
  • TASKING VX-инструментарий для TriCore v6.3r1

1 ответ

Если компилятор Tasking действительно не должен указывать файл для компиляции (я не знаю, потому что я не знаю этого компилятора), вы можете сделать это, изменив файл установки CMake, чтобы сделать он переопределяет значение по умолчанию, которое устанавливается вModules/CMakeCXXInformation.cmakeфайл типа:

      set(CMAKE_CXX_COMPILE_OBJECT
  "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")

и просто поместите ту же строку вModules/Compiler/Tasking-CXX.cmakeза исключением удаления-cаргумент. Или вы можете попробовать поместить это в свой файл набора инструментов.

По крайней мере, так выглядят настройки для работы в модулях CMake. Просто загрузите модули, и вы увидите аналогичные переопределения для определенных компиляторов или платформ.

Отказ от ответственности: я не уверен на 100%, что это сработает. Я просто искал код, чтобы найти что-то похожее на то, что можно ткнуть палкой. Документацию для можно найти здесь.

Места в исходном коде CMake, гдеCMAKE_CXX_COMPILE_OBJECTиспользуется вSource/cmMakefileTargetGenerator.cxxиSource/cmNinjaTargetGenerator.cxx(поиск регулярного выраженияCMAKE_.*_COMPILE_OBJECT). Это довольно интересно (или очень скучно) — вы можете прочитать, как команда компиляции создается исполняемым файлом CMake для различных генераторов.

Другие вопросы по тегам