diff --git a/docs/envvars.rst b/docs/envvars.rst index 7085bcf7..e9316c64 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -77,6 +77,20 @@ Building Allows to set :ref:`projectconf` option :ref:`projectconf_build_flags`. +Examples: + +.. code-block:: bash + + # Unix: + export PLATFORMIO_BUILD_FLAGS=-DFOO + export PLATFORMIO_BUILD_FLAGS="-DFOO -DBAR=1 -DFLOAT_VALUE=1.23457e+07" + export PLATFORMIO_BUILD_FLAGS="'-DWIFI_PASS=\"My password\"' '-DWIFI_SSID=\"My ssid name\"'" + + # Windows: + SET PLATFORMIO_BUILD_FLAGS=-DFOO + SET PLATFORMIO_BUILD_FLAGS=-DFOO -DBAR=1 -DFLOAT_VALUE=1.23457e+07 + SET PLATFORMIO_BUILD_FLAGS='-DWIFI_PASS="My password"' '-DWIFI_SSID="My ssid name"' + .. envvar:: PLATFORMIO_SRC_BUILD_FLAGS Allows to set :ref:`projectconf` option :ref:`projectconf_src_build_flags`. diff --git a/docs/projectconf.rst b/docs/projectconf.rst index 09a49eb5..2f1c368a 100644 --- a/docs/projectconf.rst +++ b/docs/projectconf.rst @@ -301,7 +301,10 @@ Example: .. code-block:: ini [env:specific_defines] - build_flags = -Dfoo -Dbar=1 + build_flags = -DFOO -DBAR=1 -DFLOAT_VALUE=1.23457e+07 + + [env:string_defines] + build_flags = '-DHELLO="World!"' '-DWIFI_PASS="My password"' [env:specific_inclibs] build_flags = -I/opt/include -L/opt/lib -lfoo diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index 1be95fb8..32418b50 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -96,17 +96,19 @@ def BuildProgram(env): def ProcessFlags(env, flags): - parsed_flags = env.ParseFlags(flags) - for flag in parsed_flags.pop("CPPDEFINES"): - if isinstance(flag, list): - env.Append( - CPPDEFINES=[ - '-D%s=\\"%s\\"' % (flag[0], flag[1]) - ] - ) - else: - env.Append(CPPDEFINES=flag) - env.Append(**parsed_flags) + for f in flags: + if not f: + continue + parsed_flags = env.ParseFlags(str(f)) + print parsed_flags + for flag in parsed_flags.pop("CPPDEFINES"): + if not isinstance(flag, list): + env.Append(CPPDEFINES=flag) + continue + if '\"' in flag[1]: + flag[1] = flag[1].replace('\"', '\\\"') + env.Append(CPPDEFINES=[flag]) + env.Append(**parsed_flags) # fix relative CPPPATH for i, p in enumerate(env.get("CPPPATH", [])):