so if you have this:<div>  macro(blah arg1)</div><div>    message(&quot;==${arg1}==&quot;)</div><div>  endmacro(blah)</div><div><br></div><div>  blah(&quot;${do_not_evaluate}&quot;)</div><div><div>  blah(&quot;\${do_not_evaluate}&quot;)</div>
<div><div>  blah(&quot;\\\${do_not_evaluate}&quot;)</div><div><br></div></div></div><div>you should see:</div><div>====<br></div><div><div>====<br></div><div><div>==${do_not_evaluate}==</div><div><br></div><div>I&#39;m using CMake 2.6.4 to get these results. I think 2.4.8 should give you the same...</div>
<div><br></div></div></div><div>Because you are calling through a macro and there are multiple (in this case 2) levels of de-referencing happening, you need extra escaping to get the desired effect.</div><div><br></div><div>
I think you should be ok &quot;as-is&quot; with your code if you have the right number of escapes in there. Stuff like this is sensitive, though, and there might be a better way to approach it rather than adding escape characters till it works... (Re-design with the intent of passing ${xyz} string literals through the system without multiple levels of escaping...)</div>
<div><br></div><div>If you could post some code (or simplify it) others may be able to offer some more helpful suggestions.</div><div><br></div><div><br></div><div>HTH,</div><div>David</div><div><br></div><div><br></div><div>
<div class="gmail_quote">On Wed, Sep 30, 2009 at 8:09 AM,  <span dir="ltr">&lt;<a href="mailto:fred.antares@free.fr">fred.antares@free.fr</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
The problem is I&#39;m working on quite a big project, and it was not written<br>
initially by me. I don&#39;t know about the &quot;FILE(WRITE&quot;, but here&#39;s what I&#39;m doing:<br>
- In the CMakelists, I&#39;m calling a macro with one of the parameters being what I<br>
want in my attribute (in that case &quot;${do_not_evaluate}&quot;).<br>
- This macro adds the attribute to a specific source group<br>
- The source group is parsed and interpreted by custom code that was added to<br>
CMake for our own generation needs<br>
- The arg ends up being added to a Tiny XML element<br>
- The XML file write is done from the custom code, by calling Write on the Tiny<br>
XML hierarchy<br>
<br>
The CMake version is 2.4.8, but customized with our own generators.<br>
<br>
Maybe the simpler thing, given the case and the lack of a direct solution, would<br>
be to add a specific string to the attribute, signaling to the code that it<br>
should be replaced ?<br>
<br>
Fred<br>
<div><div></div><div class="h5"><br>
Quoting David Cole &lt;<a href="mailto:david.cole@kitware.com">david.cole@kitware.com</a>&gt;:<br>
<br>
&gt; Are you using &quot;FILE(WRITE&quot;...?<br>
&gt; What version of CMake?<br>
&gt;<br>
&gt; This should work. Send the CMake code snippet you are using to try to do<br>
&gt; this so that we can see what might be wrong.<br>
&gt;<br>
&gt; If using older CMake (2.4.something) then you may have to do:<br>
&gt;   set(DOLLAR &quot;$&quot;)<br>
&gt;   file(WRITE blah &quot;${DOLLAR}{varNameHere}&quot;)<br>
&gt;<br>
&gt; ...but escaping the &quot;$&quot; inside a string literal has worked for quite some<br>
&gt; time now... I&#39;d like to know if you have a different use case or are just<br>
&gt; seeing older-versioned CMake behavior.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Sep 30, 2009 at 3:54 AM, &lt;<a href="mailto:fred.antares@free.fr">fred.antares@free.fr</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; Quoting Marcel Loose &lt;<a href="mailto:loose@astron.nl">loose@astron.nl</a>&gt;:<br>
&gt; &gt;<br>
&gt; &gt; &gt; On Wed, 2009-09-30 at 09:28 +0200, <a href="mailto:fred.antares@free.fr">fred.antares@free.fr</a> wrote:<br>
&gt; &gt; &gt; &gt; Quoting Jeroen Dierckx &lt;<a href="mailto:jeroen.dierckx@gmail.com">jeroen.dierckx@gmail.com</a>&gt;:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; On Wed, Sep 30, 2009 at 8:32 AM, &lt;<a href="mailto:fred.antares@free.fr">fred.antares@free.fr</a>&gt; wrote:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; Hi,<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; I&#39;ve seen a previous discussion on this subject, but unfortunately,<br>
&gt; &gt; &gt; none of<br>
&gt; &gt; &gt; &gt; &gt; &gt; the<br>
&gt; &gt; &gt; &gt; &gt; &gt; given solutions (as described on<br>
&gt; &gt; &gt; &gt; &gt; &gt; <a href="http://www.cmake.org/Wiki/CMake:VariablesListsStrings" target="_blank">http://www.cmake.org/Wiki/CMake:VariablesListsStrings</a>) seem to<br>
&gt; &gt; work in<br>
&gt; &gt; &gt; my<br>
&gt; &gt; &gt; &gt; &gt; &gt; case.<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; I&#39;m using CMake to generate an XML config file, and one of the tags<br>
&gt; &gt; &gt; must<br>
&gt; &gt; &gt; &gt; &gt; &gt; have an<br>
&gt; &gt; &gt; &gt; &gt; &gt; argument as follows: args=&quot;${serverConfigChanged}&quot;. The XML is used<br>
&gt; &gt; by<br>
&gt; &gt; &gt; &gt; &gt; &gt; CruiseControl, and unfortunately, it uses the same variable syntax<br>
&gt; &gt; as<br>
&gt; &gt; &gt; &gt; &gt; &gt; CMake. I<br>
&gt; &gt; &gt; &gt; &gt; &gt; tried almost every combination of escaping, double dollars, but<br>
&gt; &gt; &gt; couldn&#39;t<br>
&gt; &gt; &gt; &gt; &gt; &gt; get the<br>
&gt; &gt; &gt; &gt; &gt; &gt; correct output.<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; Is there some way to achieve that directly from the CMakeList.txt,<br>
&gt; &gt; or<br>
&gt; &gt; &gt; &gt; &gt; &gt; should I<br>
&gt; &gt; &gt; &gt; &gt; &gt; do that in the generator code ?<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Hi Jeroen,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; What about:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; file(WRITE /tmp/dummy.xml &quot;args=\&quot;\${serverConfigChanged}\&quot;\n&quot;)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; That works for me. You must escape the double quotes (&quot;) and the dollar<br>
&gt; &gt; &gt; sign ($).<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Best regards,<br>
&gt; &gt; &gt; Marcel Loose.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Unfortunately, it doesn&#39;t work. I already tried escaping the dollar sign<br>
&gt; &gt; and the<br>
&gt; &gt; result in that case is args=&quot;&quot;.<br>
&gt; &gt;<br>
&gt; &gt; Fred<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt; &gt;<br>
&gt; &gt; Visit other Kitware open-source projects at<br>
&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt; &gt;<br>
&gt; &gt; Please keep messages on-topic and check the CMake FAQ at:<br>
&gt; &gt; <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
&gt; &gt;<br>
&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt; &gt; <a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
&gt; &gt;<br>
&gt;<br>
<br>
<br>
</div></div></blockquote></div><br></div>