I did some test, and if the empty value key is allowed to add in the global compiler variable, the result may be that there are a lot of predefined keys saved to the config file, for example, see below:
<sets>
<default>
<cccccc>
<DDD>
<str>
<![CDATA[]]>
</str>
</DDD>
<BBB>
<str>
<![CDATA[xxx]]>
</str>
</BBB>
<CFLAGS>
<str>
<![CDATA[]]>
</str>
</CFLAGS>
<BIN>
<str>
<![CDATA[]]>
</str>
</BIN>
<LFLAGS>
<str>
<![CDATA[]]>
</str>
</LFLAGS>
<OBJ>
<str>
<![CDATA[]]>
</str>
</OBJ>
<LIB>
<str>
<![CDATA[]]>
</str>
</LIB>
<INCLUDE>
<str>
<![CDATA[]]>
</str>
</INCLUDE>
<BASE>
<str>
<![CDATA[aaaa]]>
</str>
</BASE>
</cccccc>
You can see, I don't want to do that DDD is a user defined key, and its value is empty. While the CFLAGS is predefined key, and its value is also empty.
So, I think the solution is: using the predefined value string, for example, a value named: __EMPTY__ or just an empty string "", then in the code when we get the value, we have to check the result, and remove the __EMPTY__ or "" in the command line.