[CMake] build step is not thread-safe for CMake

Kyle Edwards kyle.edwards at kitware.com
Mon Feb 10 08:23:48 EST 2020


On Mon, 2020-02-10 at 12:49 +0000, hex wrote:
> hello,
> 
> My build step is not thread-safe (the instruction in the COMMAND
> part). Every build step depends on one source file:
> 
> add_custom_command(
>         DEPENDS on_source.file
>         OUTPUT
>                 object_file_for_source_file
>         COMMAND not-thread-safe-compiler --build on_source.file
>         COMMENT
>                 "Building Source object"
> )
> 
> add_custom_target DEPENDS on OUTPUT from all custom command's, but in
> order to prevent parallel execution when cmake is called:
> 
> cmake --build . --target all -j30
> 
> I need to build each step in any order, but still not as a dependency
> as this would trigger unnecessary recompilation. Using
> MAIN_DEPENDENCY defines hierarchical dependency, but this won't help
> in this situation.
> 
> I cannot figure out how to prevent parallel execution of COMMAND in
> CMake. The only option I see is a single command
> 
> add_custom_target(tgt
>         DEPENDS on_all_source.files
>         COMMAND not-thread-safe-compiler --build on_source1.file
>         COMMAND not-thread-safe-compiler --build on_source2.file
>         COMMAND not-thread-safe-compiler --build on_source3.file
>         . . .
>         COMMENT
>                 "Building target"
> )
> 
> this would rebuild every source, though.
> 
> How do I set this up?
> 
> thank you

It sounds like you want order-only dependencies: dependencies the
command waits for before building, but whose changes do not actually
trigger a rebuild. As far as I know, add_custom_command() doesn't have
support for this - perhaps it could be added.

This mailing list is deprecated. Please move further discussion to the
Discourse forum:

https://discourse.cmake.org/c/code/11

Kyle


More information about the CMake mailing list