[CMake] Fwd: ADD_CUSTOM_COMMAND and Visual Studio 2010

elizabeta petreska elizabeta.petreska at gmail.com
Wed Mar 31 08:35:05 EDT 2010


If I use Visual Studio 2005 generator everything works well.

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.

While in Visual Studio 2010 it seems that the input file to custom build
step must exist on disk.

I tested this with defining Custom Build Steps directly through The Visual
Studio 2005 and Visual studio 2010 IDE.

So , someone can say is this a bug in the Visual Studio 2010 generator?

thank you



On Wed, Mar 31, 2010 at 2:09 PM, Michael Wild <themiwi at gmail.com> wrote:

> CC-ing back to the mailing list...
>
> Sorry, I don't know why this fails and I don't have VS-2010 around. What
> happens if you use a different generator?
>
> Michael
>
> On 31. Mar, 2010, at 14:05 , elizabeta petreska wrote:
>
> > Hello
> >
> > Thank you for the reply.
> > I test your suggestion.
> > It still generates foo.txt every time I build the solution.
> >
> > I think that this behavior is because foo.txt.rule file is not generated
> i.e
> > doesnot exist on disk. Here is the relevant part in the generated
> .vcxproj
> > project file :
> >
> >
> > <CustomBuild Include="$(Configuration)\Foo.txt.rule"> // Foo.txt.rule
> > doesnot exist
> >
> >      <Message
> > Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating
> > $(Configuration)/Foo.txt</Message>
> >
> >     <Command
> Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">echo
> > Foo &gt; C:/project2/build_cmake_vs10/$(Configuration)/Foo.txt</Command>
> >
> >      <AdditionalInputs
> >
> Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:project2/build_cmake_vs10/$(Configuration)/Foo.txt.rule;C:project2\myfile.txt;%(AdditionalInputs)</AdditionalInputs>
> >
> >      <Outputs
> >
> Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\project2\build_cmake_vs10\$(Configuration)\Foo.txt;%(Outputs)</Outputs>
> >
> >
> > If I change the add_custom_command to the following then foo.txt.rule is
> > made by cmake, and  it works :
> >
> > set(outfile "Foo.txt")
> > add_custom_command(OUTPUT "${outfile}"
> > COMMAND echo Foo > "${outfile}"
> >  DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/myfile.txt"
> > )
> > add_custom_target(Foo DEPENDS "${outfile}")
> >
> > In this case it works because foo.txt.rule is made by cmake on disk in
> the
> > folder ${CMAKE_CURRENT_BINARY_DIR} i.e C:\project2\build_cmake_vs10
> >
> > Someone can say what is the difference if I use CMAKE_CFG_INTDIR  in the
> > outputs of add_custom_command.
> >
> > Thanks
> >
> >
> >
> >
> >
> >
> > On Wed, Mar 31, 2010 at 1:27 PM, Michael Wild <themiwi at gmail.com> wrote:
> >
> >>
> >> On 31. Mar, 2010, at 12:07 , elizabeta petreska wrote:
> >>
> >>> Hello
> >>>
> >>> I am using cmake 2.8 to generate Visual Studio 2010 solution files.
> >>>
> >>> I have the following cmakelists.txt :
> >>>
> >>> set(PROJECT_NAME Test2)
> >>> PROJECT(${PROJECT_NAME})
> >>>
> >>> FILE(GLOB Test_SRCS
> >>> main.cpp
> >>> )
> >>>
> >>>
> >>> ADD_EXECUTABLE(${PROJECT_NAME}
> >>> ${Test_SRCS}
> >>> )
> >>>
> >>>
> >>> ADD_CUSTOM_COMMAND (OUTPUT "$(ConfigurationName)/Foo.txt"
> >>>      COMMAND echo Foo >  "$(ConfigurationName)/Foo.txt"
> >>>      DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/myfile.txt
> >>> )
> >>> ADD_CUSTOM_TARGET (Foo DEPENDS "$(ConfigurationName)/Foo.txt")
> >>> ADD_DEPENDENCIES(${PROJECT_NAME} Foo)
> >>>
> >>> The problem is that Foo.txt is generated on every build on the solution
> >>> although myfile.txt is not changed.
> >>
> >> Use absolute paths in the OUTPUT and DEPENDS options. And you should
> also
> >> use the CMAKE_CFG_INTDIR variable instead of $(ConfigurationName)...
> >>
> >> set(outfile "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/Foo.txt")
> >> add_custom_command(OUTPUT "${outfile}"
> >> COMMAND echo Foo > "${outfile}"
> >>  DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/myfile.txt"
> >> )
> >> add_custom_target(Foo DEPENDS "${outfile}")
> >>
> >>
> >> HTH
> >>
> >> Michael
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20100331/1aa4c96a/attachment.htm>


More information about the CMake mailing list