У меня проблема с компилятором arm-none-eabi-g ++, работающим в Windows.Когда я запускаю свой make-файл в Ubuntu, все работает нормально.
Цель Makefile не работает в Windows с ошибкой
arm-none-eabi-g++: error: CreateProcess: No such file or directory
Я использую MingGW в Windows.MinGW, make и G ++ добавляются в Win PATH.
Компилятор и make одинаковые версии в обеих ОС.
Ubuntu
getconf ARG_MAX
2097152
arm-none-eabi-g++ --version
arm-none-eabi-g++ (GNU Tools for Arm Embedded Processors 7-2018-q3-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
make --version
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Windows 10 с MinGW
getconf ARG_MAX
32000
arm-none-eabi-g++ --version
arm-none-eabi-g++ (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
make --version
GNU Make 4.1
Built for i686-w64-mingw32
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Дополнительная информация
Вот так выглядит одна из моих целей make-файла
$(PROJECT).o: $(PROJECT).cpp
@echo start of $(@F)
$(CPP) $(CC_FLAGS) @./.symbols.txt -std=gnu++11 -fno-rtti @./.includes.txt -o $@ $<
@echo end of $(@F)
Интересно то, что сборка Windows работает нормально только при размере.Комбинация символов .txt и .include.txt меньше 32 КБ.Так что может показаться, что это зависит от размера ARG_MAX (который находится на MINGW 32k), но, вероятно, это не так.Потому что другая цель в том же make-файле выглядит как
$(PROJECT).elf: $(SYS_OBJECTS)
$(file > .sys_objects.txt, $(SYS_OBJECTS))
$(LD) $(LD_FLAGS) -T$(LINKER_SCRIPT) $(LIBRARY_PATHS) -o $@ @./.sys_objects.txt $(LIBRARIES) $(LD_SYS_LIBS) $(LIBRARIES) $(LD_SYS_LIBS)
и она хорошо работает в Windows, несмотря на то, что размер sys_objects.txt составляет около 90 КБ.
И $ (LD), и переменные $ (CPP)) переменные установлены в arm-none-eabi-g ++.
Еще одна вещь, которую я заметил, заключается в том, что что-то в Windows добавляет такой файл, как C: \ Users \ user \ AppData \ Local \ Temp \ ccQWU5K6.s, вконец команды g ++ (независимо от того, провалилась она или нет).Я понятия не имею, откуда это взялось (может быть, какой-то аргумент поддержки MINGW?).
Кто-нибудь знает, почему сборка завершается неудачно в Windows с аргументами больше 32k, даже если другая цель отлично работает с большими аргументами?Может быть, это совпадение.