# CMP0175

Added in version 3.31.

`add_custom_command()` rejects invalid arguments.

CMake 3.30 and earlier silently ignored unsupported keywords and missing or invalid arguments for the different forms of the `add_custom_command()` command. CMake 3.31 implements more rigorous argument checking and will flag invalid or missing arguments as errors.

The `OLD` behavior of this policy will accept the same invalid keywords or arguments as CMake 3.30 and earlier. The `NEW` behavior will flag the following as errors that previously went unreported:

- The `OUTPUT` form does not accept `PRE_BUILD`, `PRE_LINK`, or `POST_BUILD` keywords.

- When the `APPEND` keyword is given, the `OUTPUT` form also does not accept `BYPRODUCTS`, `COMMAND_EXPAND_LISTS`, `DEPENDS_EXPLICIT_ONLY`, `DEPFILE`, `JOB_POOL`, `JOB_SERVER_AWARE`, `USES_TERMINAL`, or `VERBATIM` keywords.

- The `TARGET` form requires exactly one of `PRE_BUILD`, `PRE_LINK`, or `POST_BUILD` to be given. Previously, if none were given, `POST_BUILD` was assumed, or if multiple keywords were given, the last one was used.

- The `TARGET` form does not accept `DEPENDS`, `DEPENDS_EXPLICIT_ONLY`, `DEPFILE`, `IMPLICIT_DEPENDS`, `MAIN_DEPENDENCY`, `JOB_POOL`, or `JOB_SERVER_AWARE` keywords.

- The `TARGET` form now requires at least one `COMMAND` to be given.

- If a keyword expects a value to be given after it, but no value is provided, that was previously treated as though the keyword was not given at all.

- The `COMMENT` keyword expects exactly one value after it. If multiple values are given, or if the `COMMENT` keyword is given more than once, this is an error.

This policy was introduced in CMake version 3.31. It may be set by `cmake_policy()` or `cmake_minimum_required()`. If it is not set, CMake warns, and uses `OLD` behavior.

Note

The `OLD` behavior of a policy is `deprecated by definition` and may be removed in a future version of CMake.