Howdy,

I'm looking to add a dependency to all source files to ensure that a generated 
file is up-to-date before compilation. This generated file is "passed in" to 
the compiler via a global compiler definition. Is there an easy or built-in way 
to do this, or will I need to manually add a made-up target to every file in 
every library directory?

Currently, the generated file is created in the CMake Options file, using an 
exec_program command near the top of the file. The output of this process is 
not tracked, but the GLOBAL_DEFS variable applied to every source file includes 
a line that directs the compiler to consume the new file. It looks a little 
like this:

Lib_options.cmake
[...]
exec_program(
    <executable>
    ARGS
    -o <outputFile>
    -I <inputFile>
    -x <extraArgs...>
)
[...]
set (GLOBAL_DEFS
  -D<definitions...>
  -@<outputFile>
)
[...]


However, the dependency tree is not aware of this file and will not prepare it 
in any way on a per-file bases. In this case the program is executed every 
build regardless of if <inputFile> has been modified. This adds unnecessary 
time to an incremental build if no change is made, and if <inputFile> does 
happen to change CMake will not recompile the sources accordingly. I have to do 
a clean/rebuild in order for the changes to "take".

What I would like to see is a way to actually add <outputFile> as a dependency 
to each source file. Now, I'm no CMake expert, but I think it would look 
something like this:

Lib_options.cmake
[...]
# Create a command/target for our output file
add_custom_command(
  OUTPUT
    <outputFile>
  DEPENDS
    <inputFile>
  COMMAND
  <executable>
    ARGS
      -o <outputFile>
      -I <inputFile>
      -x <extraArgs...>
)

# Do something to make all source files depend on <outputFile>
# <Magic goes here>

[...]
set (GLOBAL_DEFS
  -D<definitions...>
  -@<outputFile>
)
[...]


Would this be a feasible thing to do in CMake, especially at the options file 
level? If you need any more information please let me know.

Thank you in advance!
-- 

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:
https://cmake.org/mailman/listinfo/cmake

Reply via email to