> On May 19, 2017, at 1:00 PM, Urs Thuermann <[email protected]> wrote:
> 
> How can I write a CMakeFile that will include a generated source file
> into another C source?  I have read the FAQ, searched the mailing list
> archives and have tried for two hours without success.
> 
> With standard make this would be quite simple:
> 
>       $ cat Makefile
>       foo: foo.o
>       
>       foo.o: tab.c
>       
>       tab.c:
>               awk -f mktab > $@
>       $ cat foo.c
>       #include "tab.c"
>       
>       int main() { return tab[0]; }
>       $ cat mktab
>       #!/usr/bin/awk
>       
>       BEGIN{ print "static int tab[] = { 0, 1, 2 };"; exit }
>       $ make
>       awk -f mktab > tab.c
>       cc    -c -o foo.o foo.c
>       cc   foo.o   -o foo
>       $ 
> 
> How would I do this with cmake?
> 
> urs
> — 
> 

if your source can be generated by simple substitution of variable values (like 
a template file), then configure_file() will do the trick. If the process to 
create the file is more complex, then add_custom_command() with an appropriate 
OUTPUT specification is probably what you want, something like:

add_custom_command(OUTPUT tab.c  COMMAND "awk -f mktab > tab.c")

If you don’t like where the files are generated, you can tweak WORKING_DIR 
and/or use full-paths to the file(s).

You will need to make sure that some other target explicitly depends on tab.c 
(or whatever you name the output) to cause this custom rule to be executed.

-Mike


-- 

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

Reply via email to