/*========================================================================= Program: CMake - Cross-Platform Makefile Generator Module: $RCSfile$ Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef cmAddCustomCommandCommand_h #define cmAddCustomCommandCommand_h #include "cmCommand.h" /** \class cmAddCustomCommandCommand * \brief * * cmAddCustomCommandCommand defines a new command (rule) that can * be executed within the build process * */ class cmAddCustomCommandCommand : public cmCommand { public: /** * This is a virtual constructor for the command. */ virtual cmCommand* Clone() { return new cmAddCustomCommandCommand; } /** * This is called when the command is first encountered in * the CMakeLists.txt file. */ virtual bool InitialPass(std::vector<std::string> const& args); /** * The name of the command as specified in CMakeList.txt. */ virtual const char* GetName() {return "ADD_CUSTOM_COMMAND";} /** * Succinct documentation. */ virtual const char* GetTerseDocumentation() { return "Add a custom build rule to the generated build system."; } /** * More documentation. */ virtual const char* GetFullDocumentation() { return "There are two main signatures for ADD_CUSTOM_COMMAND " "The first signature is for adding a custom command " "to produce an output.\n" " ADD_CUSTOM_COMMAND(OUTPUT output1 [output2 ...]\n" " COMMAND command1 [ARGS] [args1...]\n" " [COMMAND command2 [ARGS] [args2...] ...]\n" " [MAIN_DEPENDENCY depend]\n" " [DEPENDS [depends...]]\n" " [WORKING_DIRECTORY dir]\n" " [COMMENT comment])\n" "This defines a new command that can be executed during the build " "process. The outputs named should be listed as source files in the " "target for which they are to be generated. " "Note that MAIN_DEPENDENCY is completely optional and is " "used as a suggestion to visual studio about where to hang the " "custom command. In makefile terms this creates a new target in the " "following form:\n" " OUTPUT: MAIN_DEPENDENCY DEPENDS\n" " COMMAND\n" "If more than one command is specified they will be executed in order. " "The optional ARGS argument is for backward compatibility and will be " "ignored.\n" "The second signature adds a custom command to a target " "such as a library or executable. This is useful for " "performing an operation before or after building the target:\n" " ADD_CUSTOM_COMMAND(TARGET target\n" " PRE_BUILD | PRE_LINK | POST_BUILD\n" " COMMAND command1 [ARGS] [args1...]\n" " [COMMAND command2 [ARGS] [args2...] ...]\n" " [WORKING_DIRECTORY dir]\n" " [COMMENT comment])\n" "This defines a new command that will be associated with " "building the specified target. When the command will " "happen is determined by which of the following is specified:\n" " PRE_BUILD - run before all other dependencies\n" " PRE_LINK - run after other dependencies\n" " POST_BUILD - run after the target has been built\n" "Note that the PRE_BUILD option is only supported on Visual " "Studio 7 or later. For all other generators PRE_BUILD " "will be treated as PRE_LINK. " "If WORKING_DIRECTORY is specified the command will be executed " "in the directory given."; } cmTypeMacro(cmAddCustomCommandCommand, cmCommand); protected: bool CheckOutputs(const std::vector<std::string>& outputs); }; #endif f='#n40'>40</a> <a id='n41' href='#n41'>41</a> <a id='n42' href='#n42'>42</a> <a id='n43' href='#n43'>43</a> <a id='n44' href='#n44'>44</a> <a id='n45' href='#n45'>45</a> <a id='n46' href='#n46'>46</a> <a id='n47' href='#n47'>47</a> <a id='n48' href='#n48'>48</a> <a id='n49' href='#n49'>49</a> </pre></td> <td class='lines'><pre><code><span class="hl com">/*=========================================================================</span> <span class="hl com"></span> <span class="hl com"> Program: CMake - Cross-Platform Makefile Generator</span> <span class="hl com"> Module: $RCSfile$</span> <span class="hl com"> Language: C++</span> <span class="hl com"> Date: $Date$</span> <span class="hl com"> Version: $Revision$</span> <span class="hl com"></span> <span class="hl com"> Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.</span> <span class="hl com"> See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.</span> <span class="hl com"></span> <span class="hl com"> This software is distributed WITHOUT ANY WARRANTY; without even </span> <span class="hl com"> the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR </span> <span class="hl com"> PURPOSE. See the above copyright notices for more information.</span> <span class="hl com"></span> <span class="hl com">=========================================================================*/</span> <span class="hl ppc">#include</span> <span class="hl pps">"cmSystemTools.h"</span><span class="hl ppc"></span> <span class="hl ppc">#include</span> <span class="hl pps">"cmWin32ProcessExecution.h"</span><span class="hl ppc"></span> <span class="hl slc">// this is a test driver program for cmake.</span> <span class="hl kwb">int</span> <span class="hl kwd">main</span> <span class="hl opt">(</span><span class="hl kwb">int</span> argc<span class="hl opt">,</span> <span class="hl kwb">char</span> <span class="hl opt">*</span>argv<span class="hl opt">[])</span> <span class="hl opt">{</span> <span class="hl kwa">if</span> <span class="hl opt">(</span> argc <span class="hl opt"><=</span> <span class="hl num">1</span> <span class="hl opt">)</span> <span class="hl opt">{</span> std<span class="hl opt">::</span>cerr <span class="hl opt"><<</span> <span class="hl str">"Usage: "</span> <span class="hl opt"><<</span> argv<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">] <<</span> <span class="hl str">" executable"</span> <span class="hl opt"><<</span> std<span class="hl opt">::</span>endl<span class="hl opt">;</span> <span class="hl kwa">return</span> <span class="hl num">1</span><span class="hl opt">;</span> <span class="hl opt">}</span> std<span class="hl opt">::</span>string arg <span class="hl opt">=</span> argv<span class="hl opt">[</span><span class="hl num">1</span><span class="hl opt">];</span> <span class="hl kwa">if</span> <span class="hl opt">( (</span>arg<span class="hl opt">.</span><span class="hl kwd">find_first_of</span><span class="hl opt">(</span><span class="hl str">" "</span><span class="hl opt">) !=</span> arg<span class="hl opt">.</span>npos<span class="hl opt">) &&</span> <span class="hl opt">(</span>arg<span class="hl opt">.</span><span class="hl kwd">find_first_of</span><span class="hl opt">(</span><span class="hl str">"</span><span class="hl esc">\"</span><span class="hl str">"</span><span class="hl opt">) ==</span> arg<span class="hl opt">.</span>npos<span class="hl opt">) )</span> <span class="hl opt">{</span> arg <span class="hl opt">=</span> <span class="hl str">"</span><span class="hl esc">\"</span><span class="hl str">"</span> <span class="hl opt">+</span> arg <span class="hl opt">+</span> <span class="hl str">"</span><span class="hl esc">\"</span><span class="hl str">"</span><span class="hl opt">;</span> <span class="hl opt">}</span> std<span class="hl opt">::</span>string command <span class="hl opt">=</span> arg<span class="hl opt">;</span> <span class="hl kwb">int</span> cc<span class="hl opt">;</span> <span class="hl kwa">for</span> <span class="hl opt">(</span> cc <span class="hl opt">=</span> <span class="hl num">2</span><span class="hl opt">;</span> cc <span class="hl opt"><</span> argc<span class="hl opt">;</span> cc <span class="hl opt">++ )</span> <span class="hl opt">{</span> std<span class="hl opt">::</span>string arg <span class="hl opt">=</span> argv<span class="hl opt">[</span>cc<span class="hl opt">];</span> <span class="hl kwa">if</span> <span class="hl opt">( (</span>arg<span class="hl opt">.</span><span class="hl kwd">find_first_of</span><span class="hl opt">(</span><span class="hl str">" "</span><span class="hl opt">) !=</span> arg<span class="hl opt">.</span>npos<span class="hl opt">) &&</span> <span class="hl opt">(</span>arg<span class="hl opt">.</span><span class="hl kwd">find_first_of</span><span class="hl opt">(</span><span class="hl str">"</span><span class="hl esc">\"</span><span class="hl str">"</span><span class="hl opt">) ==</span> arg<span class="hl opt">.</span>npos<span class="hl opt">) )</span> <span class="hl opt">{</span> arg <span class="hl opt">=</span> <span class="hl str">"</span><span class="hl esc">\"</span><span class="hl str">"</span> <span class="hl opt">+</span> arg <span class="hl opt">+</span> <span class="hl str">"</span><span class="hl esc">\"</span><span class="hl str">"</span><span class="hl opt">;</span> <span class="hl opt">}</span> command <span class="hl opt">+=</span> <span class="hl str">" "</span><span class="hl opt">;</span> command <span class="hl opt">+=</span> arg<span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">return</span> cmWin32ProcessExecution<span class="hl opt">::</span><span class="hl kwd">Windows9xHack</span><span class="hl opt">(</span>command<span class="hl opt">.</span><span class="hl kwd">c_str</span><span class="hl opt">());</span> <span class="hl opt">}</span> </code></pre></td></tr></table> </div> <!-- class=content --> <div class='footer'>generated by <a href='http://git.zx2c4.com/cgit/about/'>cgit v0.12</a> at 2025-03-09 15:56:30 (GMT)</div> </div> <!-- id=cgit --> </body> </html>