[CMake] output of add_custom_command as target in Makefile

Dave Yost Dave at Yost.com
Fri Jun 12 15:35:19 EDT 2015


Hooray! Thanks!

Could a future version of cmake provide a nicer way to do this, without these error messages?

0 Fri 12:29:25 yost DaveBook ~/p/c++/cmake/custom-command-target/build
391 Z% make foo.cc
Scanning dependencies of target foo.cc
make[3]: Circular CMakeFiles/foo.cc <- foo.cc dependency dropped.
make[3]: Circular foo.cc <- foo.cc dependency dropped.
[100%] Generating foo.cc
[100%] Built target foo.cc
0 Fri 12:29:27 yost DaveBook ~/p/c++/cmake/custom-command-target/build
392 Z% 

> On 2015-06-12, at 8:40 AM, Glenn Coombs <glenn.coombs at gmail.com> wrote:
> 
> If you run "make help" it will list targets it understands.  And as you pointed out there is no target for foo.cc.  You can "make foo" but if you really want a target for foo.cc you can add one yourself:
> 
> cmake_minimum_required(VERSION 3.0.0)
> 
> project(custom-command-target)
> 
> add_custom_command (
>   OUTPUT  foo.cc
>   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/genFoo > foo.cc
>   )
> 
> add_custom_target(foo.cc DEPENDS ${CMAKE_BINARY_DIR}/foo.cc)
> 
> add_executable (foo foo.cc)
> 
> That should create a foo.cc target that you can run that will do the right thing.
> 
> --
> Glenn
> 
> On 12 June 2015 at 14:20, Dave Yost <Dave at yost.com <mailto:Dave at yost.com>> wrote:
> I’m not doing it wrong. Remember, this is a simplified example.
> 
> We want to be able to make foo.cc <http://foo.cc/> so we can look at it and compare it. Yes, we could make foo and then look at foo.cc <http://foo.cc/>, but until foo.cc <http://foo.cc/> is right, we will suffer a lot of compiler error clutter. When foo.cc <http://foo.cc/> looks right, then we will make foo.
> 
> BTW, changing add_custom_command to add_custom_target has no apparent effect and doesn’t help.
> 
>> On 2015-06-12, at 12:24 AM, Nagy-Egri Máté Ferenc <csiga.biga at aol.com <mailto:csiga.biga at aol.com>> wrote:
>> 
>> You’re doing it all wrong. You do not name source files as make targets, but the target name (or project name, I have no idea, because it rarely makes sense to name them differently). Try simply “foo” or “custom-command-target”. You would never say “make foo.cpp”, not even in an ordinary GNU Make script.
>> 
>> Feladó: Dave Yost <mailto:Dave at Yost.com>
>> Elküldve: ‎péntek‎, ‎2015‎. ‎június‎ ‎12‎. ‎2‎:‎00
>> Címzett: cmake at cmake.org <mailto:cmake at cmake.org>
>> 
>> In this example, how do I get
>>    make foo.cc <http://foo.cc/>
>> to work?
>> 
>> 0 Thu 16:56:19 yost DaveBook ~/p/c++/cmake/custom-command-target
>> 369 Z% bundle CMakeLists.txt genFoo
>> #!/usr/bin/env unbundle
>> # See http://yost.com/computers/bundle/ <http://yost.com/computers/bundle/>
>> ======== CMakeLists.txt
>> cmake_minimum_required(VERSION 3.3.0)
>> 
>> project(custom-command-target)
>> 
>> 
>> add_custom_command (
>>   OUTPUT  foo.cc <http://foo.cc/>
>>   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/genFoo > foo.cc <http://foo.cc/>
>>   )
>> 
>> add_executable (foo foo.cc <http://foo.cc/>)
>> 
>> ======== genFoo
>> #!/bin/bash
>> 
>> echo "
>> int main() {
>>   return 0;
>> }"
>> ========
>> 0 Thu 16:56:23 yost DaveBook ~/p/c++/cmake/custom-command-target
>> 370 Z% cd build                                                
>> 0 Thu 16:56:36 yost DaveBook ~/p/c++/cmake/custom-command-target/build
>> 371 Z% cmake ..                                                
>> -- Configuring done
>> -- Generating done
>> -- Build files have been written to: /Users/yost/p/c++/cmake/custom-command-target/build
>> 0 Thu 16:56:41 yost DaveBook ~/p/c++/cmake/custom-command-target/build
>> 372 Z% make clean                                              
>> 0 Thu 16:56:45 yost DaveBook ~/p/c++/cmake/custom-command-target/build
>> 373 Z% make foo.cc <http://foo.cc/>                                             
>> make: *** No rule to make target 'foo.cc <http://foo.cc/>'.  Stop.
>> 2 Thu 16:56:49 yost DaveBook ~/p/c++/cmake/custom-command-target/build
>> 374 Z% 
> 
> 
> --
> 
> Powered by www.kitware.com <http://www.kitware.com/>
> 
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ <http://www.cmake.org/Wiki/CMake_FAQ>
> 
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
> 
> CMake Support: http://cmake.org/cmake/help/support.html <http://cmake.org/cmake/help/support.html>
> CMake Consulting: http://cmake.org/cmake/help/consulting.html <http://cmake.org/cmake/help/consulting.html>
> CMake Training Courses: http://cmake.org/cmake/help/training.html <http://cmake.org/cmake/help/training.html>
> 
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html <http://www.kitware.com/opensource/opensource.html>
> 
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake <http://public.kitware.com/mailman/listinfo/cmake>
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20150612/be4a3106/attachment-0001.html>


More information about the CMake mailing list