<br><br><div class="gmail_quote"><br>If I use Visual Studio 2005 generator everything works well.<br><br>But, it seems that Visual Studio 2005 does not require the input file ( in this case foo.txt.rule ) to Custom Build Step to exist on disk. So the Visual Studio 2005 generator never makes foo.txt.rule to the disk, but the whole thing still works. <br>

<br>While in Visual Studio 2010 it seems that the input file to custom build step must exist on disk. <br><br>I tested this with defining Custom Build Steps directly through The Visual Studio 2005 and Visual studio 2010 IDE.<br>

<br>So , someone can say is this a bug in the Visual Studio 2010 generator?<br> <br>thank you<div><div></div><div class="h5"><br><br><br><div class="gmail_quote">On Wed, Mar 31, 2010 at 2:09 PM, Michael Wild <span dir="ltr">&lt;<a href="mailto:themiwi@gmail.com" target="_blank">themiwi@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">CC-ing back to the mailing list...<br>
<br>
Sorry, I don&#39;t know why this fails and I don&#39;t have VS-2010 around. What happens if you use a different generator?<br>
<font color="#888888"><br>
Michael<br>
</font><div><div></div><div><br>
On 31. Mar, 2010, at 14:05 , elizabeta petreska wrote:<br>
<br>
&gt; Hello<br>
&gt;<br>
&gt; Thank you for the reply.<br>
&gt; I test your suggestion.<br>
&gt; It still generates foo.txt every time I build the solution.<br>
&gt;<br>
&gt; I think that this behavior is because foo.txt.rule file is not generated i.e<br>
&gt; doesnot exist on disk. Here is the relevant part in the generated .vcxproj<br>
&gt; project file :<br>
&gt;<br>
&gt;<br>
&gt; &lt;CustomBuild Include=&quot;$(Configuration)\Foo.txt.rule&quot;&gt; // Foo.txt.rule<br>
&gt; doesnot exist<br>
&gt;<br>
&gt;      &lt;Message<br>
&gt; Condition=&quot;&#39;$(Configuration)|$(Platform)&#39;==&#39;Debug|Win32&#39;&quot;&gt;Generating<br>
&gt; $(Configuration)/Foo.txt&lt;/Message&gt;<br>
&gt;<br>
&gt;     &lt;Command Condition=&quot;&#39;$(Configuration)|$(Platform)&#39;==&#39;Debug|Win32&#39;&quot;&gt;echo<br>
&gt; Foo &amp;gt; C:/project2/build_cmake_vs10/$(Configuration)/Foo.txt&lt;/Command&gt;<br>
&gt;<br>
&gt;      &lt;AdditionalInputs<br>
&gt; Condition=&quot;&#39;$(Configuration)|$(Platform)&#39;==&#39;Debug|Win32&#39;&quot;&gt;C:project2/build_cmake_vs10/$(Configuration)/Foo.txt.rule;C:project2\myfile.txt;%(AdditionalInputs)&lt;/AdditionalInputs&gt;<br>


&gt;<br>
&gt;      &lt;Outputs<br>
&gt; Condition=&quot;&#39;$(Configuration)|$(Platform)&#39;==&#39;Debug|Win32&#39;&quot;&gt;C:\project2\build_cmake_vs10\$(Configuration)\Foo.txt;%(Outputs)&lt;/Outputs&gt;<br>
&gt;<br>
&gt;<br>
&gt; If I change the add_custom_command to the following then foo.txt.rule is<br>
&gt; made by cmake, and  it works :<br>
&gt;<br>
&gt; set(outfile &quot;Foo.txt&quot;)<br>
&gt; add_custom_command(OUTPUT &quot;${outfile}&quot;<br>
&gt; COMMAND echo Foo &gt; &quot;${outfile}&quot;<br>
&gt;  DEPENDS &quot;${CMAKE_CURRENT_SOURCE_DIR}/myfile.txt&quot;<br>
&gt; )<br>
&gt; add_custom_target(Foo DEPENDS &quot;${outfile}&quot;)<br>
&gt;<br>
&gt; In this case it works because foo.txt.rule is made by cmake on disk in the<br>
&gt; folder ${CMAKE_CURRENT_BINARY_DIR} i.e C:\project2\build_cmake_vs10<br>
&gt;<br>
&gt; Someone can say what is the difference if I use CMAKE_CFG_INTDIR  in the<br>
&gt; outputs of add_custom_command.<br>
&gt;<br>
&gt; Thanks<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Mar 31, 2010 at 1:27 PM, Michael Wild &lt;<a href="mailto:themiwi@gmail.com" target="_blank">themiwi@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; On 31. Mar, 2010, at 12:07 , elizabeta petreska wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Hello<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I am using cmake 2.8 to generate Visual Studio 2010 solution files.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I have the following cmakelists.txt :<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; set(PROJECT_NAME Test2)<br>
&gt;&gt;&gt; PROJECT(${PROJECT_NAME})<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; FILE(GLOB Test_SRCS<br>
&gt;&gt;&gt; main.cpp<br>
&gt;&gt;&gt; )<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ADD_EXECUTABLE(${PROJECT_NAME}<br>
&gt;&gt;&gt; ${Test_SRCS}<br>
&gt;&gt;&gt; )<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ADD_CUSTOM_COMMAND (OUTPUT &quot;$(ConfigurationName)/Foo.txt&quot;<br>
&gt;&gt;&gt;      COMMAND echo Foo &gt;  &quot;$(ConfigurationName)/Foo.txt&quot;<br>
&gt;&gt;&gt;      DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/myfile.txt<br>
&gt;&gt;&gt; )<br>
&gt;&gt;&gt; ADD_CUSTOM_TARGET (Foo DEPENDS &quot;$(ConfigurationName)/Foo.txt&quot;)<br>
&gt;&gt;&gt; ADD_DEPENDENCIES(${PROJECT_NAME} Foo)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The problem is that Foo.txt is generated on every build on the solution<br>
&gt;&gt;&gt; although myfile.txt is not changed.<br>
&gt;&gt;<br>
&gt;&gt; Use absolute paths in the OUTPUT and DEPENDS options. And you should also<br>
&gt;&gt; use the CMAKE_CFG_INTDIR variable instead of $(ConfigurationName)...<br>
&gt;&gt;<br>
&gt;&gt; set(outfile &quot;${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/Foo.txt&quot;)<br>
&gt;&gt; add_custom_command(OUTPUT &quot;${outfile}&quot;<br>
&gt;&gt; COMMAND echo Foo &gt; &quot;${outfile}&quot;<br>
&gt;&gt;  DEPENDS &quot;${CMAKE_CURRENT_SOURCE_DIR}/myfile.txt&quot;<br>
&gt;&gt; )<br>
&gt;&gt; add_custom_target(Foo DEPENDS &quot;${outfile}&quot;)<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; HTH<br>
&gt;&gt;<br>
&gt;&gt; Michael<br>
<br>
</div></div></blockquote></div><br>
</div></div></div><br>