> 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
