Как установить определенный CMAKE_C_OUTPUT_EXTENSION для кросс-компиляции конфигураций с CMAKE?
Я пытаюсь настроить файл набора инструментов для кросс-компиляции с версией CMake 3.12.0.
Мои объектные файлы имеют другие расширения, чем .obj
на Windows и .o
в UNIX.
Таким образом, я установил свой CMAKE_LANG_OUTPUT_EXTENSION
в .src
,
К сожалению, эта переменная перезаписывается CMakeCInformation.cmake
файл в этих строках:
# some compilers use different extensions (e.g. sdcc uses .rel)
# so set the extension here first so it can be overridden by the compiler specific file
if(UNIX)
set(CMAKE_C_OUTPUT_EXTENSION .o)
else()
set(CMAKE_C_OUTPUT_EXTENSION .obj)
endif()
Если я прокомментирую эти строки, мои конфигурации будут работать, и будет использоваться правильное расширение объекта.
Я думаю, что мой файл инструментария настроен так, что CMake не будет выполнять свои внутренние проверки компилятора.
Вот как выглядят строки ввода моего файла инструментария:
SET(CMAKE_SYSTEM_NAME Generic)
INCLUDE(CMakeForceCompiler)
SET(CMAKE_C_COMPILER_FORCED TRUE)
SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
#other compiler configuration lines here
SET(CMAKE_C_OUTPUT_EXTENSION .src)
SET(CMAKE_ASM_OUTPUT_EXTENSION .o)
SET(CMAKE_C_OUTPUT_EXTENSION_REPLACE 1)
SET(CMAKE_ASM_OUTPUT_EXTENSION_REPLACE 1)
я знаю CMakeForceCompiler
амортизируется и CMAKE_TRY_COMPILE_TARGET_TYPE
следует использовать именно поэтому оба есть.
Я говорю CMake о моем файле toolchain, используя -DCMAKE_TOOLCHAIN_FILE
Не могли бы вы помочь мне понять, что я делаю не так?
РЕДАКТИРОВАТЬ: я также пытался CACHE
значение CMAKE_C_OUTPUT_EXTENSION
, По крайней мере, для меня это не сработало.
1 ответ
Вы не делаете ничего плохого. добавлять SET(CMAKE_C_OUTPUT_EXTENSION .src)
в файле CMakeLists.txt после project
команда отсутствует в файле набора инструментов. Это должно дать вам желаемое поведение (так как оно должно переопределить значения, установленные CMakeCInformation
и любые другие скрипты модуля). Это, вероятно, упущение при использовании файлов цепочки инструментов и CMakeCInformation, вероятно, оно не должно переопределять значение цепочки инструментов. Вы должны зайти на сайт CMake и отправить отчет об ошибке.