[CMake] custom command to create file #included in other file?

Mike Jackson mike.jackson at imts.us
Tue Jul 29 11:36:44 EDT 2008


VTK does this all the time. You could try to take a look through the  
vtk source and try to figure out what is going on.

Also,
   You could try:

  CONFIGURE_FILE(InputFile OutputFile
                         [COPYONLY] [ESCAPE_QUOTES] [@ONLY])

So..
CONFIGURE_FILE(file1.h.in file1.h)
CONFIGURE_FILE(file2.h.in file2.h)

set (My_SOURCES
	file3.c
)
set (Generated_files
        file1.h
	file2.h
)

#Include the path to the generated files
INCLUDE_DIRECTORIES( "${PROJECT_BINARY_DIR}" )
add_executable(MyApp ${My_SOURCES} ${Generated_files} )


None of that is tested but _may_ work for your needs.

-- 
Mike Jackson   Senior Research Engineer
Innovative Management & Technology Services


On Jul 29, 2008, at 11:22 AM, Markus Grabner wrote:

>
> 	Hi!
>
>     How can I write a custom command to create a source file which  
> doesn't
> appear in the source file list of any target, but is included in  
> another
> source file? Consider a file "file1.c", from which "file2.c" should be
> generated automatically whenever "file1.c" has been modified. However,
> both "file1.c" and "file2.c" are just code snippets which can't be  
> compiled
> into separate object files, but must instead be included in  
> "file3.c" like
> this:
>
> void func1() {
> #include "file1.c"
> }
>
> void func2() {
> #include "file2.c"
> }
>
> So only "file3.c" contains syntactically valid C code (after  
> preprocessing,
> i.e., including "file1.c" and "file2.c"), while "file1.c" and  
> "file2.c" by
> themselves don't. Now the corresponding target would be
>
> add_executable(file3 file3.c)
>
> According to [1] and [2], the file to be generated should appear in  
> the source
> list of a target. However, this is not possible here since it would  
> result in
> a compile error. The "add_dependencies" command [3] also doesn't  
> help since
> it can only be used for top level targets, but not for the output
> of "add_custom_command".
>
> Since writing such rules in plain Makefile syntax by hand is  
> trivial, I
> believe that cmake should also support this situation, but I just  
> can't
> figure out how. Are there any ideas how to solve this?
>
> 	Thanks & kind regards,
> 		Markus
>
>
> [1]
> http://www.cmake.org/HTML/cmake-2.6.html#command:add_custom_command
>
> [2]
> http://www.cmake.org/Wiki/ 
> CMake_FAQ#How_can_I_generate_a_source_file_during_the_build.3F
>
> [3]
> http://www.cmake.org/HTML/cmake-2.6.html#command:add_dependencies
>
> -- 
> Markus Grabner - Computer Graphics and Vision
> Graz University of Technology, Inffeldgasse 16a/II, 8010 Graz, Austria
> Phone: +43/316/873-5041, Fax: +43/316/873-5050
> WWW: http://www.icg.tugraz.at/Members/grabner
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake
>




More information about the CMake mailing list