[CMake] output of add_custom_command as target in Makefile

Glenn Coombs glenn.coombs at gmail.com
Fri Jun 12 11:40:43 EDT 2015


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> wrote:

> I’m not doing it wrong. Remember, this is a simplified example.
>
> We want to be able to make foo.cc so we can look at it and compare it.
> Yes, we could make foo and then look at foo.cc, but until foo.cc is
> right, we will suffer a lot of compiler error clutter. When 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>
> 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 <Dave at Yost.com>
> *Elküldve:* ‎péntek‎, ‎2015‎. ‎június‎ ‎12‎. ‎2‎:‎00
> *Címzett:* cmake at cmake.org
>
> In this example, how do I get
>    make 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/
> ======== CMakeLists.txt
> cmake_minimum_required(VERSION 3.3.0)
>
> project(custom-command-target)
>
>
> add_custom_command (
>   OUTPUT  foo.cc
>   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/genFoo > foo.cc
>   )
>
> add_executable (foo 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
> make: *** No rule to make target 'foo.cc'.  Stop.
> 2 Thu 16:56:49 yost DaveBook ~/p/c++/cmake/custom-command-target/build
> 374 Z%
>
>
>
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> 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
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20150612/5f3a982b/attachment-0001.html>


More information about the CMake mailing list