[Solved] Force recompile?

I have a bunch of Arduinos in different places on my property.
I develop the code on a Linux PC, then copy the main.ccp and config.h to a Linux notebook, go the the relevant hardware node and upload the code.
What I noticed is that PIO uploads the previous code, as it it thinks ‘nothing has changed’, and uploads the previous version.

There are two types of compilation results, a short and a longer one:

Short:

Processing uno (platform: atmelavr; board: uno; framework: arduino)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/uno.html
PLATFORM: Atmel AVR (2.2.0) > Arduino Uno
HARDWARE: ATMEGA328P 16MHz, 2KB RAM, 31.50KB Flash
DEBUG: Current (simavr) On-board (simavr)
PACKAGES: 
- framework-arduino-avr 5.0.0 
- toolchain-atmelavr 1.50400.190710 (5.4.0)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 22 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <Ethernet> 2.0.0
|   |-- <SPI> 1.0
|-- <PubSubClient> 2.8
|-- <OneWire> 2.3.5
|-- <SPI> 1.0
Building in release mode
Compiling .pio/build/uno/src/main.cpp.o
Linking .pio/build/uno/firmware.elf
Checking size .pio/build/uno/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [====      ]  40.0% (used 819 bytes from 2048 bytes)
Flash: [========  ]  75.2% (used 24252 bytes from 32256 bytes)
================================================================= [SUCCESS] Took 1.79 seconds =================================================================

Terminal will be reused by tasks, press any key to close it.

> Executing task in folder ExternalSensors_v1: platformio run <

Longer version:

Processing uno (platform: atmelavr; board: uno; framework: arduino)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/uno.html
PLATFORM: Atmel AVR (2.2.0) > Arduino Uno
HARDWARE: ATMEGA328P 16MHz, 2KB RAM, 31.50KB Flash
DEBUG: Current (simavr) On-board (simavr)
PACKAGES: 
- framework-arduino-avr 5.0.0 
- toolchain-atmelavr 1.50400.190710 (5.4.0)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 22 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <Ethernet> 2.0.0
|   |-- <SPI> 1.0
|-- <PubSubClient> 2.8
|-- <OneWire> 2.3.5
|-- <SPI> 1.0
Building in release mode
Compiling .pio/build/uno/src/main.cpp.o
Compiling .pio/build/uno/libd92/SPI/SPI.cpp.o
Compiling .pio/build/uno/lib5cc/Ethernet_ID872/Dhcp.cpp.o
Compiling .pio/build/uno/lib5cc/Ethernet_ID872/Dns.cpp.o
Archiving .pio/build/uno/libd92/libSPI.a
Indexing .pio/build/uno/libd92/libSPI.a
Compiling .pio/build/uno/lib5cc/Ethernet_ID872/Ethernet.cpp.o
Compiling .pio/build/uno/lib5cc/Ethernet_ID872/EthernetClient.cpp.o
Compiling .pio/build/uno/lib5cc/Ethernet_ID872/EthernetServer.cpp.o
Compiling .pio/build/uno/lib5cc/Ethernet_ID872/EthernetUdp.cpp.o
Compiling .pio/build/uno/lib5cc/Ethernet_ID872/socket.cpp.o
Compiling .pio/build/uno/lib5cc/Ethernet_ID872/utility/w5100.cpp.o
Compiling .pio/build/uno/lib68c/PubSubClient_ID89/PubSubClient.cpp.o
Compiling .pio/build/uno/lib146/OneWire_ID1/OneWire.cpp.o
Archiving .pio/build/uno/libFrameworkArduinoVariant.a
Indexing .pio/build/uno/libFrameworkArduinoVariant.a
Archiving .pio/build/uno/lib5cc/libEthernet_ID872.a
Archiving .pio/build/uno/lib146/libOneWire_ID1.a
Indexing .pio/build/uno/lib5cc/libEthernet_ID872.a
Compiling .pio/build/uno/FrameworkArduino/CDC.cpp.o
Indexing .pio/build/uno/lib146/libOneWire_ID1.a
Archiving .pio/build/uno/lib68c/libPubSubClient_ID89.a
Compiling .pio/build/uno/FrameworkArduino/HardwareSerial.cpp.o
Compiling .pio/build/uno/FrameworkArduino/HardwareSerial0.cpp.o
Compiling .pio/build/uno/FrameworkArduino/HardwareSerial1.cpp.o
Indexing .pio/build/uno/lib68c/libPubSubClient_ID89.a
Compiling .pio/build/uno/FrameworkArduino/HardwareSerial2.cpp.o
Compiling .pio/build/uno/FrameworkArduino/HardwareSerial3.cpp.o
Compiling .pio/build/uno/FrameworkArduino/IPAddress.cpp.o
Compiling .pio/build/uno/FrameworkArduino/PluggableUSB.cpp.o
Compiling .pio/build/uno/FrameworkArduino/Print.cpp.o
Compiling .pio/build/uno/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/uno/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/uno/FrameworkArduino/USBCore.cpp.o
Compiling .pio/build/uno/FrameworkArduino/WInterrupts.c.o
Compiling .pio/build/uno/FrameworkArduino/WMath.cpp.o
Compiling .pio/build/uno/FrameworkArduino/WString.cpp.o
Compiling .pio/build/uno/FrameworkArduino/abi.cpp.o
Compiling .pio/build/uno/FrameworkArduino/hooks.c.o
Compiling .pio/build/uno/FrameworkArduino/main.cpp.o
Compiling .pio/build/uno/FrameworkArduino/new.cpp.o
Compiling .pio/build/uno/FrameworkArduino/wiring.c.o
Compiling .pio/build/uno/FrameworkArduino/wiring_analog.c.o
Compiling .pio/build/uno/FrameworkArduino/wiring_digital.c.o
Compiling .pio/build/uno/FrameworkArduino/wiring_pulse.S.o
Compiling .pio/build/uno/FrameworkArduino/wiring_pulse.c.o
Compiling .pio/build/uno/FrameworkArduino/wiring_shift.c.o
Archiving .pio/build/uno/libFrameworkArduino.a
Indexing .pio/build/uno/libFrameworkArduino.a
Linking .pio/build/uno/firmware.elf
Checking size .pio/build/uno/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [====      ]  40.0% (used 819 bytes from 2048 bytes)
Flash: [========  ]  75.2% (used 24252 bytes from 32256 bytes)
Building .pio/build/uno/firmware.hex
================================================================= [SUCCESS] Took 3.33 seconds =================================================================

Terminal will be reused by tasks, press any key to close it.

The shorter version does not re-compile the code, while the longer one does.

Is there a way to force the compilation; either through a CLI or .ini statement?

The commandline would be:

pio run --target clean
pio run
pio run --target upload

That does a “clean” of all generated files first, which forces a complete rebuild with the second pio run.

In VSCode, it’s the dustbin/trash can icon on the PlatformIO toolbar at the bottom, followed by the compile and/or upload buttons.

HTH

Cheers,
Norm.

1 Like

Great; thanks :slight_smile:
Works like a charm!

Also, thanks for the two methods of invoking the ‘clean’.

1 Like