[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