2014-11-27 3 views
3

У меня встроенный проект с использованием кросс-компилятора. Я хотел бы представить тест Google, скомпилированный с помощью собственного компилятора GCC. Кроме того, создайте некоторые целевые объекты тестирования с помощью CTC-компилятора.CMake: как сменить компилятор для отдельной цели

Кратко:
У меня есть 3 разные цели и компилировать их с 3-мя различными компиляторами. Как выразить это в CMakeLists.txt? I Пробовал SET_TARGET_PROPERTIES;
но невозможно установить CXX variable с этой командой!

ответ

-2

CMake - это генератор файлов make. Он генерирует файл, который затем можно использовать для сборки. Если вы хотите использовать более одной целевой платформы, вам нужно запустить CMake несколько раз с разными генераторами.

Так что вы хотите сделать, это не представляется возможным в CMake, но с CMake: Вы можете создать скрипт, который вызывает CMake несколько раз.

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 сценария (или в файле 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)'s compiler. 
use_native_compiler() 
add_executable(bar bar.c) # Compiled with your native compiler (e.g. `avr-gcc`). 
Смежные вопросы