Как удалить параметр из шаблона команды компиляции по умолчанию для определенного компилятора?
Любой нормальный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 для различных генераторов.