Still no luck :( . I really wonder why it is trying to execute my "generate" binary even before it is built. Here are my updated lines of code. #Trying to compile and run generate.c. generate.c creates a new file someoutput.txt and copies all data from someinput.txt to someoutput.txt add_executable(generate server/generate.c) add_custom_command( # I want to generate someoutput.txt OUTPUT ${CMAKE_BINARY_DIR}/server/someoutput.txt # using the generate program. cmake knows that "generate" refers to the above target COMMAND generate ${CMAKE_CURRENT_SOURCE_DIR}/server/someinput.txt # only run if sominput.txt changed DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/server/someinput.txt ${CMAKE_BINARY_DIR}/bin/generate${CMAKE_EXECUTABLE_SUFFIX} # tell to run in current binary dir WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin # some nice comment in the output COMMENT "Generating ${CMAKE_BINARY_DIR}/someoutput.txt" VERBATIM )
2009/8/27 David Cole <david.c...@kitware.com> > Use full path file names as DEPENDS arguments. > Also: depend on the executable file too so that cmake knows not to try to > run the custom command before the executable is built... > > i.e. : > > DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/server/someinput.txt > ${CMAKE_BINARY_DIR}/bin/generate${CMAKE_EXECUTABLE_SUFFIX} > > > HTH, > David > > > On Thu, Aug 27, 2009 at 2:41 PM, Swaroop Ramachandra <swaroo...@gmail.com > > wrote: > >> Hi Michael, >> >> Thanks for your reply. I still have the same problem. >> * >> * >> gmake-3.81[2]: bin/generate: Command not found >> lin: gmake-3.81[2]: *** [bin/generate] Error 127 >> lin: gmake-3.81[1]: *** [CMakeFiles/generate.dir/all] Error 2 >> >> >> >> Here's my code as is: >> #Trying to compile and run generate.c. generate.c creates a new file >> someoutput.txt and copies all data from someinput.txt to someoutput.txt >> add_executable(generate server/generate.c) >> add_custom_command( >> # I want to generate someoutput.txt >> OUTPUT ${CMAKE_BINARY_DIR}/server/someoutput.txt >> # using the generate program. cmake knows that "generate" refers to the >> above target >> COMMAND generate ${CMAKE_CURRENT_SOURCE_DIR}/server/someinput.txt >> # only run if sominput.txt changed >> DEPENDS server/someinput.txt >> # tell to run in current binary dir >> WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin >> # some nice comment in the output >> COMMENT "Generating ${CMAKE_BINARY_DIR}/someoutput.txt" >> VERBATIM >> ) >> >> >> Still the same issue. I guess it is trying to execute my "generate" even >> before it is compiled. Does CMake see that in the line "COMMAND" generate >> refers to the compiled one? Again, since generate is created in round one of >> make, the second run sees the "generate" and runs fine. >> >> Any help is greatly appreciated! Thanks for your time! >> >> Regards, >> Swaroop >> >> 2009/8/27 Michael Wild <them...@gmail.com> >> >> >>> On 27. Aug, 2009, at 0:58, Swaroop Ramachandra wrote: >>> >>> Hi, >>>> >>>> I'm trying to do the following in my CMake file: >>>> >>>> 1. Generate a "xyz.txt" file >>>> 2. Compile a "generate.c" file to give out a "generate" binary in my >>>> bin >>>> directory. >>>> 3. Execute the "generate" binary (The binary just reads contents of >>>> "xyz.txt" and creates a copy of "xyz.txt"using read() and write() >>>> functions >>>> in C) >>>> >>>> The problem: >>>> When I do a fresh build, 1 and 2 succeed. 3 fails with the following >>>> error >>>> *"bin/generate: Command not found"* >>>> >>>> However, if I *re-run the build immediately* after, since the "generate" >>>> binary is already created, all 3 successfully execute. Here's a snippet >>>> of >>>> what I have written. >>>> >>>> ------------ >>>> ------------ >>>> /*---- Code to generate xyz.txt -- Successfully generated each >>>> time------*/ >>>> ---------- >>>> --------- >>>> ADD_EXECUTABLE(generate ${CMAKE_CURRENT_SOURCE_DIR}/server/generate.c) >>>> >>>> set(GEN ${CMAKE_BINARY_DIR}/bin/generate) >>>> >>>> ADD_CUSTOM_COMMAND( >>>> TARGET generate POST_BUILD >>>> COMMAND ${GEN} >>>> DEPENDS ${CMAKE_BINARY_DIR}/server/xyz.txt} >>>> ) >>>> In my ADD_CUSTOM_COMMAND, I have specified POST_BUILD, which I >>>> understood to >>>> be that the command will be executed only after creation of the >>>> "generate" >>>> binary. >>>> >>> >>> That's the wrong way to go about it. the TARGET form of the >>> add_custom_command is intended to "finish" the actual target. What you want >>> is something like this: >>> >>> # no need for absolute paths... >>> add_executable(generate server/generate.c) >>> >>> add_custom_command( >>> # tell cmake you want to generate xyz.c >>> OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/xyz.c >>> # using the generate program. cmake knows that "generate" refers to the >>> above target >>> COMMAND generate ${CMAKE_CURRENT_SOURCE_DIR}/xyz.txt >>> # only run if xyz.txt changed >>> DEPENDS xyz.txt >>> # tell to run in current binary dir >>> WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} >>> # some nice comment in the output >>> COMMENT "Generating ${CMAKE_CURRENT_BINARY_DIR}/xyz.c" >>> VERBATIM >>> ) >>> >>> >>> And then you simply use ${CMAKE_CURRENT_BINARY_DIR}/xyz.c in one of your >>> other targets. CMake will then know that it first needs to create target >>> "generate", then run the program on xyz.txt to create >>> ${CMAKE_CURRENT_BINARY_DIR}/xyz.c, and finally use that to build the actual >>> target. >>> >>> >>> HTH >>> >>> Michael >>> >>> >> >> >> -- >> >> Samuel >> Goldwyn<http://www.brainyquote.com/quotes/authors/s/samuel_goldwyn.html> - >> "I'm willing to admit that I may not always be right, but I am never >> wrong." >> _______________________________________________ >> Powered by www.kitware.com >> >> Visit other Kitware open-source projects at >> http://www.kitware.com/opensource/opensource.html >> >> Please keep messages on-topic and check the CMake FAQ at: >> http://www.cmake.org/Wiki/CMake_FAQ >> >> Follow this link to subscribe/unsubscribe: >> http://www.cmake.org/mailman/listinfo/cmake >> > > -- Ted Turner <http://www.brainyquote.com/quotes/authors/t/ted_turner.html> - "Sports is like a war without the killing."
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake