[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 > 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