Как установить определенный 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, По крайней мере, для меня это не сработало.

4

Решение

Вы не делаете ничего плохого. добавлять SET(CMAKE_C_OUTPUT_EXTENSION .src) в файле CMakeLists.txt после project команда отсутствует в файле набора инструментов. Это должно дать вам желаемое поведение (так как оно должно переопределить значения, установленные CMakeCInformation и любые другие скрипты модуля). Это, вероятно, упущение при использовании файлов цепочки инструментов и CMakeCInformation, вероятно, оно не должно переопределять значение цепочки инструментов. Вы должны зайти на сайт CMake и отправить отчет об ошибке.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector