PROJECT_DIR variable doesn't works with include path in platformio.ini

  • Core 6.1.18
  • Home 3.4.4
    framework = espidf, arduino

I try to add additional include directories using PROJECT_DIR variable to platformio.ini build_flags section, but got empty path.

I try different formatting, nothing works.

  -I /Users/user/CODE/waterius_esp32s2/src12345/usb
  -I /Users/user/CODE/waterius_esp32s2/src/usb
  -I "${PROJECT_DIR}/src/usb"
  -I "${PROJECT_DIR}"/src/usb
  -I ${PROJECT_DIR}/src/usb
  -I $PROJECT_DIR/src/usb
  -I PROJECT_DIR/src/usb

output in verbose build:

-DPROJECT_DIR=/Users/user/CODE/waterius_esp32s2 
-I/Users/user/CODE/waterius_esp32s2/src12345/usb
-I/Users/user/CODE/waterius_esp32s2/src/usb
-Isrc/usb
-Isrc/usb
-Isrc/usb
-Isrc/usb
-I/Users/user/.platformio/platforms/espressif32/builder/frameworks/PROJECT_DIR/src/usb

platformio.ini file:

[platformio]
src_dir = src
default_envs = esp32s2

[env]
firmware_version = "\"1.1.1\""

[libraries]
arduinojson = ArduinoJson@7.3.1
pubsubclient = PubSubClient@2.8
espasyncwebserver = https://github.com/waterius/ESPAsyncWebServer.git#20230926   
esp32-arduino-lib-builder = https://github.com/espressif/esp32-arduino-lib-builder.git

hathach_tinyusb = https://github.com/hathach/tinyusb.git#0.18.0
espressif_tinyusb = https://github.com/espressif/tinyusb.git#eca025f
espressif_esp_tinyusb = https://github.com/espressif/esp-usb.git#3ab23ac3fb
espasyncwebserver_124 = https://github.com/me-no-dev/ESPAsyncWebServer.git
                              
[env:esp32s2]
platform = https://github.com/Jason2866/platform-espressif32.git#24b67f905a

framework = espidf, arduino
board = esp32-s2-saola-1

upload_port = /dev/cu.usbmodem01
upload_speed = 921800

board_build.flash_mode = qio
board_build.filesystem = littlefs
board_build.partitions = partitions.csv

monitor_speed = 115200
monitor_filters = log2file, default

lib_ldf_mode = chain+
lib_archive = no
lib_deps =
  ${libraries.pubsubclient}
  ${libraries.arduinojson}
  ${libraries.espressif_tinyusb}
  ${libraries.espasyncwebserver_124}
  
lib_ignore =
  AsyncTCP_RP2040W

build_flags = 
  -D LOGLEVEL=2
  -D FIRMWARE_VERSION=${this.firmware_version}
  -D CONFIG_TINYUSB_ENABLED=1
  -D CONFIG_TINYUSB_CDC_ENABLED=1
  -D CONFIG_USB_ENABLED=1
  -D CONFIG_USB_CDC_ENABLED=1
  -D CONFIG_TINYUSB_CDC_RX_BUFSIZE=512
  -D CFG_TUSB_MCU=OPT_MCU_ESP32S2
  -D CFG_TUSB_OS_INC_PATH=freertos/
  -D ARDUINO_USB_CDC_ON_BOOT=1
  -D ARDUINO_USB_MODE=0
  -D CONFIG_AUTOSTART_ARDUINO=1
  -D PROJECT_DIR="${PROJECT_DIR}"
  -I /Users/user/CODE/waterius_esp32s2/src12345/usb
  -I /Users/user/CODE/waterius_esp32s2/src/usb
  -I "${PROJECT_DIR}/src/usb"
  -I "${PROJECT_DIR}"/src/usb
  -I ${PROJECT_DIR}/src/usb

build log:

xtensa-esp32s2-elf-gcc -o .pio/build/esp32s2/esp32-hal-timer.c.o -c -std=gnu17 -mlongcalls -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=unused-but-set-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -Wno-enum-conversion -gdwarf-4 -ggdb -Og -fmacro-prefix-map=/Users/user/CODE/waterius_esp32s2=. -fmacro-prefix-map=/Users/user/.platformio/packages/framework-espidf=/IDF -fstrict-volatile-bitfields -fno-lto -fno-jump-tables -fno-tree-switch-conversion -Wno-old-style-declaration -DPLATFORMIO=60118 -DARDUINO_ESP32S2_DEV -DLOGLEVEL=2 -DFIRMWARE_VERSION=\"1.1.1\" -DCONFIG_TINYUSB_ENABLED=1 -DCONFIG_TINYUSB_CDC_ENABLED=1 -DCONFIG_USB_ENABLED=1 -DCONFIG_USB_CDC_ENABLED=1 -DCONFIG_TINYUSB_CDC_RX_BUFSIZE=512 -DCFG_TUSB_MCU=OPT_MCU_ESP32S2 -DCFG_TUSB_OS_INC_PATH=freertos/ -DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_MODE=0 -DCONFIG_AUTOSTART_ARDUINO=1 
-DPROJECT_DIR=/Users/user/CODE/waterius_esp32s2 
-DESP_PLATFORM -DIDF_VER=\"5.1.5.250117\" -DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\" -DSOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE -D_GNU_SOURCE -D_POSIX_READER_WRITER_LOCKS -DconfigENABLE_FREERTOS_DEBUG_OCDAWARE=1 -DARDUINO=10812 -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD=\"ESP32S2_DEV\" -DARDUINO_VARIANT=\"esp32s2\" -DESP32=ESP32
-I/Users/user/CODE/waterius_esp32s2/src12345/usb
-I/Users/user/CODE/waterius_esp32s2/src/usb
-Isrc/usb
-Isrc/usb
-Isrc/usb
-Isrc/usb
-I/Users/user/.platformio/platforms/espressif32/builder/frameworks/PROJECT_DIR/src/usb
-I.pio/build/esp32s2/config
-I/Users/user/.platformio/packages/framework-arduinoespressif32/variants/esp32s2
-I/Users/user/.platformio/packages/framework-arduinoespressif32/cores/esp32
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/FS/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/Network/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/PPP/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/SD/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/Update/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/USB/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src
-I/Users/user/.platformio/packages/framework-arduinoespressif32/cores/esp32/libb64
-I/Users/user/.platformio/packages/framework-espidf/components/newlib/platform_include
-I/Users/user/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/include
-I/Users/user/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include
-I/Users/user/.platformio/packages/framework-espidf/components/freertos/esp_additions/include/freertos
-I/Users/user/.platformio/packages/framework-espidf/components/freertos/esp_additions/include
-I/Users/user/.platformio/packages/framework-espidf/components/freertos/esp_additions/arch/xtensa/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_hw_support/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc
-I/Users/user/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc/esp32s2
-I/Users/user/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32s2
-I/Users/user/.platformio/packages/framework-espidf/components/heap/include
-I/Users/user/.platformio/packages/framework-espidf/components/log/include
-I/Users/user/.platformio/packages/framework-espidf/components/soc/include
-I/Users/user/.platformio/packages/framework-espidf/components/soc/esp32s2
-I/Users/user/.platformio/packages/framework-espidf/components/soc/esp32s2/include
-I/Users/user/.platformio/packages/framework-espidf/components/hal/esp32s2/include
-I/Users/user/.platformio/packages/framework-espidf/components/hal/include
-I/Users/user/.platformio/packages/framework-espidf/components/hal/platform_port/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_rom/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_rom/include/esp32s2
-I/Users/user/.platformio/packages/framework-espidf/components/esp_rom/esp32s2
-I/Users/user/.platformio/packages/framework-espidf/components/esp_common/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_system/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_system/port/soc
-I/Users/user/.platformio/packages/framework-espidf/components/esp_system/port/include/private
-I/Users/user/.platformio/packages/framework-espidf/components/xtensa/include
-I/Users/user/.platformio/packages/framework-espidf/components/xtensa/esp32s2/include
-I/Users/user/.platformio/packages/framework-espidf/components/lwip/include
-I/Users/user/.platformio/packages/framework-espidf/components/lwip/include/apps
-I/Users/user/.platformio/packages/framework-espidf/components/lwip/include/apps/sntp
-I/Users/user/.platformio/packages/framework-espidf/components/lwip/lwip/src/include
-I/Users/user/.platformio/packages/framework-espidf/components/lwip/port/include
-I/Users/user/.platformio/packages/framework-espidf/components/lwip/port/freertos/include
-I/Users/user/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include
-I/Users/user/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include/arch
-I/Users/user/.platformio/packages/framework-espidf/components/spi_flash/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_partition/include
-I/Users/user/.platformio/packages/framework-espidf/components/mbedtls/port/include
-I/Users/user/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/include
-I/Users/user/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/library
-I/Users/user/.platformio/packages/framework-espidf/components/mbedtls/esp_crt_bundle/include
-I/Users/user/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/everest/include
-I/Users/user/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m
-I/Users/user/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m/p256-m
-I/Users/user/.platformio/packages/framework-espidf/components/wpa_supplicant/include
-I/Users/user/.platformio/packages/framework-espidf/components/wpa_supplicant/port/include
-I/Users/user/.platformio/packages/framework-espidf/components/wpa_supplicant/esp_supplicant/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_adc/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_adc/interface
-I/Users/user/.platformio/packages/framework-espidf/components/esp_adc/esp32s2/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_adc/deprecated/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_eth/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_event/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/deprecated
-I/Users/user/.platformio/packages/framework-espidf/components/driver/analog_comparator/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/dac/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/gpio/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/gptimer/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/i2c/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/i2s/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/ledc/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/mcpwm/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/parlio/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/pcnt/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/rmt/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/sdio_slave/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/sdmmc/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/sigma_delta/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/spi/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/temperature_sensor/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/touch_sensor/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/twai/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/uart/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/usb_serial_jtag/include
-I/Users/user/.platformio/packages/framework-espidf/components/driver/touch_sensor/esp32s2/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_pm/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_ringbuf/include
-I/Users/user/.platformio/packages/framework-espidf/components/http_parser
-Imanaged_components/espressif__mdns/include
-I/Users/user/.platformio/packages/framework-espidf/components/console
-I/Users/user/.platformio/packages/framework-espidf/components/vfs/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_netif/include
-I/Users/user/.platformio/packages/framework-espidf/components/fatfs/diskio
-I/Users/user/.platformio/packages/framework-espidf/components/fatfs/vfs
-I/Users/user/.platformio/packages/framework-espidf/components/fatfs/src
-I/Users/user/.platformio/packages/framework-espidf/components/wear_levelling/include
-I/Users/user/.platformio/packages/framework-espidf/components/sdmmc/include
-I/Users/user/.platformio/packages/framework-espidf/components/nvs_flash/include
-I/Users/user/.platformio/packages/framework-espidf/components/app_update/include
-I/Users/user/.platformio/packages/framework-espidf/components/bootloader_support/include
-I/Users/user/.platformio/packages/framework-espidf/components/bootloader_support/bootloader_flash/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_app_format/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_timer/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_wifi/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_wifi/wifi_apps/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_phy/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_phy/esp32s2/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_hid/include
-I/Users/user/.platformio/packages/framework-espidf/components/usb/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_psram/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_https_ota/include
-I/Users/user/.platformio/packages/framework-espidf/components/esp_http_client/include
-Imanaged_components/joltwallet__littlefs/include
-Imanaged_components/espressif__esp-dsp/modules/dotprod/include
-Imanaged_components/espressif__esp-dsp/modules/support/include
-Imanaged_components/espressif__esp-dsp/modules/support/mem/include
-Imanaged_components/espressif__esp-dsp/modules/windows/include
-Imanaged_components/espressif__esp-dsp/modules/windows/hann/include
-Imanaged_components/espressif__esp-dsp/modules/windows/blackman/include
-Imanaged_components/espressif__esp-dsp/modules/windows/blackman_harris/include
-Imanaged_components/espressif__esp-dsp/modules/windows/blackman_nuttall/include
-Imanaged_components/espressif__esp-dsp/modules/windows/nuttall/include
-Imanaged_components/espressif__esp-dsp/modules/windows/flat_top/include
-Imanaged_components/espressif__esp-dsp/modules/iir/include
-Imanaged_components/espressif__esp-dsp/modules/fir/include
-Imanaged_components/espressif__esp-dsp/modules/math/include
-Imanaged_components/espressif__esp-dsp/modules/math/add/include
-Imanaged_components/espressif__esp-dsp/modules/math/sub/include
-Imanaged_components/espressif__esp-dsp/modules/math/mul/include
-Imanaged_components/espressif__esp-dsp/modules/math/addc/include
-Imanaged_components/espressif__esp-dsp/modules/math/mulc/include
-Imanaged_components/espressif__esp-dsp/modules/math/sqrt/include
-Imanaged_components/espressif__esp-dsp/modules/matrix/mul/include
-Imanaged_components/espressif__esp-dsp/modules/matrix/add/include
-Imanaged_components/espressif__esp-dsp/modules/matrix/addc/include
-Imanaged_components/espressif__esp-dsp/modules/matrix/mulc/include
-Imanaged_components/espressif__esp-dsp/modules/matrix/sub/include
-Imanaged_components/espressif__esp-dsp/modules/matrix/include
-Imanaged_components/espressif__esp-dsp/modules/fft/include
-Imanaged_components/espressif__esp-dsp/modules/dct/include
-Imanaged_components/espressif__esp-dsp/modules/conv/include
-Imanaged_components/espressif__esp-dsp/modules/common/include
-Imanaged_components/espressif__esp-dsp/modules/matrix/mul/test/include
-Imanaged_components/espressif__esp-dsp/modules/kalman/ekf/include
-Imanaged_components/espressif__esp-dsp/modules/kalman/ekf_imu13states/include
-Imanaged_components/espressif__esp_modem/include /Users/user/.platformio/packages/framework-arduinoespressif32/cores/esp32/esp32-hal-timer.c

According to the documentation, you do not need ${PROJECT_DIR} as you can use a relative path.

What is the file structure of your project and what do you want to achieve or solve?

Thanks so much for a rapid answer! Now I see ‘relative’ in documentation:
[env:specific_inclibs]
build_flags =
-I/opt/include
-I"relative/path with space"
-I"C:\windows\dir"
-I"${platformio.packages_dir}/framework-foo/include"
-L/opt/lib
-lfoo

I try to add esp-usb library to my project and need to add a path to my ‘tusb_config.h’.

Ok, it’s not a bug, it’s a feature. (I was confused, cause it’s different behaviour in one section) Thanks!

Topic can be closed.