<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Two Syntax Styles</title><link>https://sourceforge.net/p/tboox-xmake/wiki/Two%2520Syntax%2520Styles/</link><description>Recent changes to Two Syntax Styles</description><atom:link href="https://sourceforge.net/p/tboox-xmake/wiki/Two%20Syntax%20Styles/feed" rel="self"/><language>en</language><lastBuildDate>Mon, 12 Nov 2018 23:15:09 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/tboox-xmake/wiki/Two%20Syntax%20Styles/feed" rel="self" type="application/rss+xml"/><item><title>Two Syntax Styles modified by ruki</title><link>https://sourceforge.net/p/tboox-xmake/wiki/Two%2520Syntax%2520Styles/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Recently, xmake's description syntax has been enhanced to support two different grammar styles at the same time.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;set-add&lt;/code&gt; style&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;key-val&lt;/code&gt; style&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="the-set-add-style"&gt;The &lt;code&gt;set-add&lt;/code&gt; style&lt;/h4&gt;
&lt;p&gt;This is xmake's classic style, for example:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;set_kind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"static"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;add_defines&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"DEBUG"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;add_files&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"src/*.c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"test/*.cpp"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Advantages: more flexible control, you can control a variety of highly complex configuration requirements.&lt;/li&gt;
&lt;li&gt;Disadvantages: scope control is not obvious, need to manually standardized indentation&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="the-key-val-style"&gt;The &lt;code&gt;key-val&lt;/code&gt; style&lt;/h4&gt;
&lt;p&gt;This is added style recently, for example:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;defines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"DEBUG"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"src/*.c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"test/*.cpp"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Advantages: more readable&lt;/li&gt;
&lt;li&gt;Disadvantages: conditional compilation is not very flexible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These two styles, xmake are currently compatible with the support, but our recommendations are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For simple projects, do not need too complicated conditional compilation, you can use the key-val way, more streamlined, good readability&lt;/li&gt;
&lt;li&gt;For complex engineering, the need for greater control, and flexibility, it is recommended to use set-add way&lt;/li&gt;
&lt;li&gt;Try not to mix and write the two styles, although it is supported, but this description of the entire project will feel confused, so try to unify the style as their description of the specification&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, not only for target, like option, task, template are supported in two ways to write, for example:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;-- set-add style&lt;/span&gt;
&lt;span class="n"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"demo"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;set_default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;set_showmenu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;set_category&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"option"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;set_description&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Enable or disable the demo module"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"    =y|n"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- key-val style&lt;/span&gt;
&lt;span class="n"&gt;option&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"demo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;default&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;showmenu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"option"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;desciption&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"Enable or disable the demo module"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"    =y|n"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The custom tasks or plugins can be written like this:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;-- set-add style&lt;/span&gt;
&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;-- on run&lt;/span&gt;
    &lt;span class="n"&gt;on_run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;-- trace&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"hello xmake!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="kr"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;-- set menu&lt;/span&gt;
    &lt;span class="n"&gt;set_menu&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                    &lt;span class="c1"&gt;-- usage&lt;/span&gt;
                    &lt;span class="n"&gt;usage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"xmake hello [options]"&lt;/span&gt;

                    &lt;span class="c1"&gt;-- description&lt;/span&gt;
                &lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Hello xmake!"&lt;/span&gt;

                    &lt;span class="c1"&gt;-- options&lt;/span&gt;
                &lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
                &lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;-- key-val style&lt;/span&gt;
&lt;span class="n"&gt;task&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;-- trace&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"hello xmake!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="kr"&gt;end&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;menu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;-- usage&lt;/span&gt;
                &lt;span class="n"&gt;usage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"xmake hello [options]"&lt;/span&gt;

                &lt;span class="c1"&gt;-- description&lt;/span&gt;
            &lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Hello xmake!"&lt;/span&gt;

                &lt;span class="c1"&gt;-- options&lt;/span&gt;
            &lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">ruki</dc:creator><pubDate>Mon, 12 Nov 2018 23:15:09 -0000</pubDate><guid>https://sourceforge.nete5d4d75f0b2426ab72d8569d88b9f5af73b40b75</guid></item></channel></rss>