Принудительная синхронизация файлов для сборки CMake в среде WSLC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Принудительная синхронизация файлов для сборки CMake в среде WSL

Сообщение Anonymous »

Фон
Я унаследовал проект прошивки для микроконтроллера STM32, который уже определяет процесс сборки с использованием Docker, генерирующего двоичные файлы .bin и .elf. Я пытаюсь настроить свою среду разработки с помощью Visual Studio 2022 и Cmake, чтобы я мог запустить сборку в дистрибутиве WSL и синхронизировать сгенерированные файлы .elf и .bin обратно на свой хост Windows для использования с сервером GDB. Я написал следующий (упрощенный) файл CMakeLists.txt, который успешно запускает существующие образы докеров для сборки проекта:

# CMakeList.txt: файл проекта CMake верхнего уровня, выполните глобальную настройку. # и включите сюда подпроекты. # cmake_minimum_required (ВЕРСИЯ 3.8) # Включите горячую перезагрузку для компиляторов MSVC, если она поддерживается. если (ПОЛИТИКА CMP0141) cmake_policy (SET CMP0141 НОВЫЙ) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$") конециф() проект ("firmware_cmake") включить (ВнешнийПроект) установить (DOCKERFILE_DIR $ {CMAKE_CURRENT_SOURCE_DIR}) ВнешнийПроект_Добавить( build_image ПРЕФИКС build_image SOURCE_DIR ${DOCKERFILE_DIR} CONFIGURE_COMMAND rm -rf ${CMAKE_SOURCE_DIR}/build/ ${CMAKE_SOURCE_DIR}/Firmware/autogen ${CMAKE_SOURCE_DIR}/Firmware/build ${CMAKE_SOURCE_DIR}/Firmware/.tup BUILD_COMMAND docker build -t build-img . BUILD_IN_SOURCE 1 УСТАНОВКА_КОМАНДА "" ВСЕГДА ПРАВДА ) ВнешнийПроект_Добавить( build_cont ЗАВИСИТ от build_image ПРЕФИКС build_cont SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_COMMAND docker rm build-cont Докер BUILD_COMMAND run -i -v ${CMAKE_CURRENT_SOURCE_DIR}:/FW --name build-cont build-img BUILD_IN_SOURCE 1 УСТАНОВКА_КОМАНДА "" ВСЕГДА ПРАВДА ) add_custom_target(copy-runtime-files ВСЕ КОМАНДА ${CMAKE_COMMAND} -E копировать ${CMAKE_SOURCE_DIR}/Firmware/build/Firmware.bin ${CMAKE_BINARY_DIR}/Firmware.bin ЗАВИСИТ от build_cont) Проблема Создаваемые файлы прошивки не синхронизируются обратно с моим хост-компьютером Windows, когда я выполняю сборку или повторную сборку. Если я войду в свой дистрибутив WSL, я увижу, что файлы собираются и существуют в ~/.vs/firmware_cmake/out/build/linux-debug/, но они не синхронизируются. в %path-to-my-project%\out\Ubuntu\build\linux-debug

В качестве доказательства концепции я создал совершенно новый проект под названием cmake-test, в котором есть только один файл hello-world.cpp с этим файлом CMakeLists.txt:

cmake_minimum_required (ВЕРСИЯ 3.8) # Включите горячую перезагрузку для компиляторов MSVC, если она поддерживается. если (ПОЛИТИКА CMP0141) cmake_policy (SET CMP0141 НОВЫЙ) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$") конециф() проект («cmake-test») add_executable (cmake-test-execute "cmake-test.cpp" "cmake-test.h") add_custom_command( ВЫХОДНОЙ файл времени выполнения.txt КОМАНДА коснитесь ${CMAKE_SOURCE_DIR}/cmake-test/test.txt КОМАНДА ${CMAKE_COMMAND} -E копировать ${CMAKE_SOURCE_DIR}/cmake-test/test.txt ${CMAKE_BINARY_DIR}/test.txt ) add_custom_target( копировать файлы времени выполнения ВСЕ ЗАВИСИТ от ${CMAKE_BINARY_DIR}/runtime-file.txt ) Я снова вижу файл test.txt, созданный в моей среде WSL, но он не синхронизирован с моей хост-средой Windows; однако я вижу, что cmake-test-execute синхронизируется с моей хост-средой Windows.

РЕДАКТИРОВАТЬ: Вот как мой CMakePresets.json настроен для этой сборки:

{ «версия»: 3, "configurePresets": [ { "name": "linux-debug", "displayName": "Отладка Linux", "генератор": "Ниндзя", "binaryDir": "${sourceDir}/out/build/${presetName}", "installDir": "${sourceDir}/out/install/${presetName}", "cacheVariables": { "CMAKE_BUILD_TYPE": "Отладка" }, "состояние": { "тип": "равно", "lhs": "${hostSystemName}", "рхс": "Линукс" }, "продавец": { "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": { "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}", «copyBuildOutput»: правда } } } ] } Вопрос Как мне указать CMake, чтобы он помечал другие файлы как выходные артефакты, чтобы они были включены в файлы, помеченные для обратной синхронизации с моим компьютером с Windows, так же, как файлы, добавленные с помощью add_executable() ?

Я признаю, что, вероятно, использую cmake нестандартным способом, но из-за особенностей настройки этого проекта я не могу изменить метод, используемый для сборки файлов прошивки.
Ссылки
Я в основном следую этим руководствам, чтобы добиться того, что пытаюсь сделать:

пошаговое руководство по wsl

отладка проектов CMake с помощью сервера GDB

отладка встроенного устройства ARM в Visual Studio

Кросс-компиляция ARM gcc в Visual Studio
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»