Мы пишем приложение для встроенного устройства ARM/Linux. Разработка выполняется на ПК с ОС Windows, с использованием кросс-компилятора, Eclipse и Ninja. Cmake в настоящее время может создавать сценарии сборки, которые хорошо работают по назначению.cmake - компилировать изначально и скрещивать один и тот же код
У нас есть модульные тесты, которые выполняются на встроенном устройстве, подключенном к сети, после того, как проект будет перенаправлен (на git) на сервер.
Мы пытаемся реализовать модульные тесты, которые будут работать на ПК, прежде чем мы попробуем их на устройстве. Это означает построение изначально, используя MinGW gcc - конечно, мы не можем запускать исполняемые файлы ARM Linux на ПК.
Даже если мы переключим инструментальную цепочку, запустив cmake, чтобы перестроить набор правил для Ninja или создадим два каталога сборки, один для ПК, один для ARM, проблема остается в том, что CMake попытается запустить тестовый исполняемый файл, а позже постройте, модульные тесты будут предприняты в сборке ARM.
Как мы можем сконфигурировать сборки (через cmake) для создания обоих - и не пытаться запускать скремблированные на ПК?
Вы можете проверить [ 'CMAKE_CROSSCOMPILING'] (HTTPS : //cmake.org/cmake/help/latest/variable/CMAKE_CROSSCOMPILING.html). См. [Как указать CMake использовать компилятор архитектуры сборки?] (Http://stackoverflow.com/questions/36173840/how-to-instruct-cmake-to-use-the-build-architecture-compiler). – Florian
Не могли бы вы добавить пример кода CMake, как вы выполняете «запуск тестового исполняемого файла»? Вы добавили его как 'add_custom_command (TARGET ... POST_BUILD ...)' и/или с помощью 'add_test()'? Я думаю, что в обоих случаях просто положить 'if (NOT CMAKE_CROSSCOMPILING)' | 'endif()' вокруг этой конкретной команды должен сделать трюк. – Florian
@Florian: В CMakeLists.txt верхнего уровня есть только 'ADD_SUBDIRECTORY (UnitTests)'. Затем в каталоге есть 'ExternalProject_Add (GMockDownload \t GIT_REPOSITORY" https://github.com/google/googletest.git "...', который выполняет всю оставшуюся работу. Да, 'if (NOT CMAKE_CROSSCOMPILING)' помогает здесь. Кажется, два отдельных сборщика и запуск cmake дважды - это не оптимально, потому что я получаю два проекта Eclipse вместо двух конфигураций сборки. –