问题原因:

我想在pio里面随便放置文件夹,让他参与编译。添加的文件是C文件,pio工程是CPP文件。

下面是使用NXP的LVGL图形库生成工具GUI-GUIDER1.3.0生成的文件夹

我要添加的文件结构

├─.pio (no show,because too long)
├─.vscode
├─include
├─lib
│  └─BLTGUI
│      ├─custom
│      └─generated
│          ├─guider_customer_fonts
│          ├─guider_fonts
│          └─images
└─src

困难点一:

不知道放哪里,因为不懂pio的时候,放哪里都报错。

困难点二:

混合使用C和CPP,会报错undefined reference to,是LD连接错误

main.cpp:26: undefined reference to `setup_ui'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\esp32dev\firmware.elf] Error 1

JSON解决方案:(已验证OK)

使用library.json文件:官网说明,让自己的新文件夹成为一个库文件

下面是完整的一个json

{
    "name": "BLTGUI",
    "keywords": "bltgui",
    "description": "bltgui des",
    "version": "1.0",
    "authors": {
      "name": "lb"
    },
    "licence": "MIT",
    "frameworks": "arduino",
    "platforms": "espressif32",
    "build" : {
      "unflags": "-std=gnu++11",
      "flags": [
         "-std=c99",
        "-I custom",
        "-I generated",
        "-I generated/guider_customer_fonts",
        "-I generated/guider_fonts",
        "-I generated/images"
      ],
      "srcFilter": [
        "+<*.c>",
        "+<custom/*.c>",
        "+<generated/*.c>",
        "+<generated/guider_customer_fonts/*.c>",
        "+<generated/guider_fonts/*.c>",
        "+<generated/images/*.c>"
      ]
    }
  }

最重要的说明点:

  • srcFilter里面要用“+<xxx/xxx>”的格式。不能直接用“xxx”。官网位置
  • 多文件夹不能直接放在lib下,要放在lib/xxname/下,json也是放在这个下面和多文件夹并列。

INI解决方案:(待验证)

关于文件src路径添加到编译的设置问题:build_src_filter

这个build_src_filter是ini里面的src路径设置,和json里面的设置,语法相同。

  • +<PATH>包括模板
  • -<PATH>排除模板
  • PATH是相对于src_dir的
  • PATH可以使用GLOB全局通配符
  • src_dir在ini里不设置默认就是src文件夹。可以指定其他文件夹。

例如:+<*> -<.git/> -<.svn/>