[CMake] ADD_CUSTOM_COMMAND and Visual Studio 2010

Michael Wild themiwi at gmail.com
Wed Mar 31 08:09:06 EDT 2010


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



More information about the CMake mailing list