Ответ 1
У меня была такая же проблема прямо сейчас, но другой ответ мне не помог. Я также выполняю кросс-компиляцию, и мне нужны некоторые утилиты для компиляции с GCC, но мой основной код компилируется с помощью avr-gcc.
В принципе, если у вас есть CMakeLists.txt
, и вы хотите, чтобы все цели в этом файле были скомпилированы с другим компилятором, вы можете просто установить переменные вручную.
Определите эти макросы где-нибудь:
macro(use_host_compiler)
if (${CURRENT_COMPILER} STREQUAL "NATIVE")
# Save current native flags
set(NATIVE_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "GCC flags for the native compiler." FORCE)
# Change compiler
set(CMAKE_SYSTEM_NAME ${CMAKE_HOST_SYSTEM_NAME})
set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR})
set(CMAKE_C_COMPILER ${HOST_C_COMPILER})
set(CMAKE_C_FLAGS ${HOST_C_FLAGS})
set(CURRENT_COMPILER "HOST" CACHE STRING "Which compiler we are using." FORCE)
endif()
endmacro()
macro(use_native_compiler)
if (CMAKE_CROSSCOMPILING AND ${CURRENT_COMPILER} STREQUAL "HOST")
# Save current host flags
set(HOST_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "GCC flags for the host compiler." FORCE)
# Change compiler
set(CMAKE_SYSTEM_NAME ${NATIVE_SYSTEM_NAME})
set(CMAKE_SYSTEM_PROCESSOR ${NATIVE_SYSTEM_PROCESSOR})
set(CMAKE_C_COMPILER ${NATIVE_C_COMPILER})
set(CMAKE_C_FLAGS ${NATIVE_C_FLAGS})
set(CURRENT_COMPILER "NATIVE" CACHE STRING "Which compiler we are using." FORCE)
endif()
endmacro()
В самом начале вашего CMakeLists.txt script (или в файле toolchain) установите следующие переменные в соответствии с тем, что вам нужно:
-
CURRENT_COMPILER
-
HOST_C_COMPILER
-
HOST_C_FLAGS
-
NATIVE_SYSTEM_NAME
-
NATIVE_C_COMPILER
-
NATIVE_C_FLAGS
Идея заключается в том, что CMAKE_C_COMPILER
(и компания) - это переменная, как и любая другая, поэтому ее настройка внутри определенной области может оставить ее измененной в пределах этой области.
Использование примера:
use_host_compiler()
add_executable(foo foo.c) # Compiled with your host (computer) compiler.
use_native_compiler()
add_executable(bar bar.c) # Compiled with your native compiler (e.g. `avr-gcc`).