Do tej pory korzystałem z dobrze udokumentowanej drogikrzyżuj kod kompilacji z cmake, definiując plik Toolchain jak na końcu postu. Chciałbym jednak znaleźć sposób kompilacji krzyżowej nie całego mojego projektu C, C ++, ale tylko niektóre cele. Przykładem zastosowania jest na przykład przeprowadzanie testów jednostkowych za pomocą testu Google dla systemów wbudowanych i koordynowanie wszystkiego z CMAKE. Czy ktoś może podać odniesienie, link lub minimalny przykład, aby rozwiązać ten problem?
To, czego nie chcę robić, to dwukrotne zdefiniowanie celów dla różnych architektur, wolę zdefiniować plik toolchain i jakoś przekazać go do odpowiedniego pliku CMakeLists.txt lub celu.
Oto przykład minimalnego pliku łańcucha narzędzi, ponieważ chciałbym go użyć do globalnej konfiguracji projektu 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)
Odpowiedzi:
0 dla odpowiedzi № 1Mam projekt, w którym chcę mieć możliwość wyboru między testem_jednostki i kompilacją krzyżową. Oto moje źródło 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)
Zdajemy APP_TYPE
parametr do wyboru między 2 opcjami. Nie używam pliku toolchain, ale pozwalam cmake automatycznie wyszukiwać kompilator w moich zmiennych środowiskowych.
To może nie być najlepsze rozwiązanie, ale działa w moim projekcie