<br><br><div class="gmail_quote">On Sat, Apr 4, 2009 at 10:25 AM, Óscar Fuentes <span dir="ltr">&lt;<a href="mailto:ofv@wanadoo.es">ofv@wanadoo.es</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="h5">Philip Lowman &lt;<a href="mailto:philip@yhbt.com">philip@yhbt.com</a>&gt; writes:<br>
&gt; You might want to have a look at the COMPILE_DEFINITIONS target property.<br>
<br>
</div>That&#39;s interesting, but its contents is sans the -D:<br>
<br>
_GNU_SOURCE __STDC_LIMIT_MACROS __STDC_CONSTANT_MACROS<br>
<br>
instead of<br>
<br>
-D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS<br>
<br>
This can be overcomed with string manipulation. But the docs says that<br>
only flags beginning with -D or /D are added to this property. Where the<br>
rest of the flags go?<br>
<br>
add_definitions(-DFOO -Wl,s -save-temps)<br>
<br>
will put FOO into the COMPILE_DEFINITIONS property, bug how can I access<br>
the other flags?</blockquote><div><br>Not sure exactly.  Hopefully someone else may have some insights here that can help you.<br><br>One suggestion would be if you have non-definition flags you want to add to every compilation you make, simply use CMAKE_C_FLAGS or CMAKE_CXX_FLAGS.<br>
<br>if(CMAKE_COMPILER_IS_GNU_CC)<br>   set(CMAKE_CXX_FLAGS &quot;${CMAKE_CXX_FLAGS} -Wl,s -save-temps&quot;)<br>endif()<br><br>add_definitions() was originally intended for preprocessor definitions only.  If you&#39;re using it to non-definition compilation flags I have no idea how you&#39;ll be able to pull those out again.<br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">OTOH, what happens if the user sets CFLAGS and other environment<br>
variables that affects the build after cmake is run? I ask just out of<br>
curiosity, as I know that the method I&#39;m using for configuring the file<br>
does not take into account this possibility.</blockquote><div><br>You can set CFLAGS and/or CXXFLAGS but they only work before the first configure.  After that they are ignored.  If you need to change CFLAGS/CXXFLAGS after that the best way is to modify CMAKE_C_FLAGS and CMAKE_CXX_FLAGS in the CACHE.<br>
 </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Even if configure_file were adequate, the variables CMAKE_C_FLAGS<br>
CMAKE_CXX_FLAGS etc are empty, when I expect them to have the full<br>
compiler options for the current build type, including the stuff<br>
introduced with add_definitions.<br>
<br>
I can&#39;t believe that there is not a simple method for knowing such a<br>
basic piece of information as &quot;which compiler switches and options are<br>
used for compiling source files of language X?&quot; so it seems that I&#39;m<br>
missing something.</blockquote><div><br>There might be a better way to do this I&#39;m not aware of.  If so hopefully someone else can chime in.<br>I believe the answer to your question (per directory in your source tree) is:<br>
   ${CMAKE_&lt;lang&gt;_FLAGS} + ${CMAKE_&lt;lang&gt;_FLAGS&lt;build_type&gt;} + compile_definitions (at this directory).<br><br>This assumes you don&#39;t care about target properties like COMPILE_FLAGS or DEFINE_SYMBOL.<br>
<br>add_definitions() is meant primarily as a way to add preprocessor definitions.  In some projects it is often used in many directories throughout source code and not always in the first CMakeLists.txt.  If all of the preprocessor definitions you care about are defined in the toplevel, however, CMakeLists.txt you should be able to use the COMPILE_DEFINITIONS() property I mentioned.<br>
<br></div></div>-- <br>Philip Lowman<br>