cmake add_custom_command examples

Signatures

add_custom_command(OUTPUT output1 [output2 ...]
  COMMAND command1 [ARGS] [args1...]
  [COMMAND command2 [ARGS] [args2...] ...]
  [MAIN_DEPENDENCY depend]
  [DEPENDS [depends...]]
  [BYPRODUCTS [files...]]
  [IMPLICIT_DEPENDS <lang1> depend1
  [<lang2> depend2] ...]
  [WORKING_DIRECTORY dir]
  [COMMENT comment]
  [DEPFILE depfile]
  [JOB_POOL job_pool]
  [JOB_SERVER_AWARE <bool>]
  [VERBATIM] [APPEND] [USES_TERMINAL]
  [COMMAND_EXPAND_LISTS]
[DEPENDS_EXPLICIT_ONLY])

Examples

facebookincubator/velox velox/experimental/breeze/cmake/cuda.cmake :58

add_custom_command(
    OUTPUT ${target}.o
    COMMAND
      ${NVCC_EXECUTABLE} -x cu ${CMAKE_NVCC_FLAGS} ${NDEBUG_DEFINE} -DPLATFORM_CUDA
      -DCUDA_PLATFORM_SPECIALIZATION_HEADER=${CUDA_PLATFORM_SPECIALIZATION_HEADER}
      -I${CMAKE_SOURCE_DIR} ${CMAKE_CXX_FLAGS} ${COMPILER_WARN_FLAGS} ${OPT_FLAGS} ${CUDA_OPT_FLAGS}
      ${arg_FLAGS} -std=c++17 -c ${source} -MD -MF ${target}.o.d -o ${target}.o
    DEPFILE ${target}.o.d
    DEPENDS ${arg_DEPENDS}
    COMMENT "Building CUDA object ${target}.o"
  )

qt/qtbase src/corelib/Qt6AndroidMacros.cmake :639

add_custom_command(OUTPUT "${apk_final_file_path}"
            COMMAND "${deployment_tool}"
                --input "${deployment_file}"
                --output "${apk_final_dir}"
                --apk "${apk_final_file_path}"
                --depfile "${dep_file_path}"
                --builddir "${relative_to_dir}"
                ${extra_args}
                ${sign_apk}
            COMMENT "Creating APK for ${target}"
            ${qt_android_delete_build_dir_commands}
            DEPENDS "${target}" "${deployment_file}" ${extra_deps} ${target}_prepare_apk_dir
            DEPFILE "${dep_file_path}"
            VERBATIM
            ${uses_terminal}
        )

halide/Halide src/runtime/CMakeLists.txt :281

add_custom_command(OUTPUT "${LL}"
                                   COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} ${CMAKE_C_COMPILER_LAUNCHER} $<TARGET_FILE:clang> ${clang_flags} -o "${LL}" "$<SHELL_PATH:${SOURCE}>"
                                   DEPENDS $<TARGET_NAME:clang> "${SOURCE}"
                                   DEPFILE "${basename}.d"
                                   VERBATIM)

google/boringssl cmake/go.cmake :51

add_custom_command(OUTPUT ${dest}
                       COMMAND ${GO_EXECUTABLE} build
                               -o ${CMAKE_CURRENT_BINARY_DIR}/${dest} ${package}
                       COMMAND ${GO_EXECUTABLE} run ${godeps} -format depfile
                               -target ${target} -pkg ${package} -out ${depfile}
                       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                       DEPENDS ${godeps} ${PROJECT_SOURCE_DIR}/go.mod
                       DEPFILE ${depfile})

vectorgraphics/asymptote cmake-scripts/generated-files.cmake :161

add_custom_command(
            OUTPUT ${processed_output_file}
            COMMAND ${PY3_INTERPRETER} ${ASY_SCRIPTS_DIR}/gen_preprocessed_depfile.py
            --cxx-compiler=${cxx_preprocessor}
            "$<$<BOOL:${asy_includes_list}>:--include-dirs=$<REMOVE_DUPLICATES:${asy_includes_list}>>"
            "$<$<BOOL:${asy_cxx_std}>:--cxx-standard=${asy_cxx_std}>"
            "$<$<BOOL:${asy_macros_list}>:--macro-defs=$<REMOVE_DUPLICATES:${asy_macros_list}>>"
            --out-dep-file=${GENERATED_AUX_DIR}/${symfile}.d
            --out-i-file=${processed_output_file}
            --in-src-file=${src_dir}/${symfile}.cc
            ${msvc_flag}
            DEPFILE ${GENERATED_AUX_DIR}/${symfile}.d
            BYPRODUCTS ${GENERATED_AUX_DIR}/${symfile}.d
            DEPENDS ${src_dir}/${symfile}.cc
            ${ASY_SCRIPTS_DIR}/gen_preprocessed_depfile.py
            ${ASYMPTOTE_SYM_PROCESS_NEEDED_HEADERS}
            ${ADDITIONAL_ADD_CUSTOM_CMD_ARGS}
    )