/ / Métodos para cruzar compilar apenas os alvos definidos (“alguns”) em um projeto CMake - cmake, incorporado, compilação cruzada, googletest, googlemock

Métodos para cruzar compilar apenas os destinos definidos (“alguns”) em um projeto CMake - cmake, incorporado, cross-compiling, googletest, googlemock

Eu tinha usado até agora o caminho bem documentado paracross compile code com cmake, definindo um arquivo Toolchain como no final do post. No entanto, gostaria de encontrar uma maneira de compilar não todo o meu projeto C, C ++, mas apenas determinados alvos. Um caso de uso para estes é, por exemplo, quando você está fazendo testes de unidade com o google test para sistemas embarcados e está coordenando tudo com o CMAKE. Alguém pode fornecer uma referência, link ou exemplo mínimo para resolver isso?

O que eu não quero fazer é definir alvos duas vezes para arquiteturas diferentes, eu prefiro definir o arquivo toolchain e de alguma forma passar isso para o CMakeLists.txt correspondente ou alvo.

Aqui está um exemplo de um arquivo toolchain mínimo, como eu usaria para configuração global de um projeto cmake.

SET(CMAKE_SYSTEM_NAME Generic)

SET(CMAKE_C_COMPILER   ..)
SET(CMAKE_CXX_COMPILER ..)
SET(CMAKE_C_COMPILER   C:,,,.exe)
SET(CMAKE_CXX_COMPILER C:,,,.exe)

SET(CMAKE_FIND_ROOT_PATH  .buildghs )

# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Respostas:

0 para resposta № 1

Eu tenho um projeto onde eu quero ser capaz de escolher entre unit_test e crossCompile. Aqui está minha fonte cmakelist:

if(APP_TYPE STREQUAL "PROJ_UNIT_TEST")
#compiler choice
set( ENV{CC} ${CM_ECLIPSE_HOME}/../../MinGW/bin/gcc.exe)


else()
#CC has to be set before project() that will search for the compiler
#this is deprecated : CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU)
set( ENV{CC} ${CM_ECLIPSE_HOME}/../../GNU Tools ARM Embedded/6-2016-q4-major/bin/arm-none-eabi-gcc.exe)

Nós passamos APP_TYPE parâmetro para escolher entre as 2 opções. Eu não uso o arquivo de toolchain, mas deixe o cmake procurar um compilador em minhas variáveis ​​de ambiente automaticamente.

Isso pode não ser a melhor solução, mas funciona para o meu projeto