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

novelrt/NovelRT cmake/CopyRuntimeDependencies.cmake :18

add_custom_command(
        TARGET ${TARGET} POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
                $<TARGET_RUNTIME_DLLS:${dependency}> $<TARGET_FILE_DIR:${TARGET}>
        COMMAND_EXPAND_LISTS
        )

cadaver/turso3d ThirdParty/SDL/cmake/android/SdlAndroidFunctions.cmake :137

add_custom_command(
    OUTPUT "${arg_OUTPUT_APK}" "${java_r_path}"
    COMMAND ${command}
    DEPENDS ${depends} ${arg_MANIFEST}
    COMMAND_EXPAND_LISTS
    VERBATIM
  )

Hork-Engine/Hork-Source ThirdParty/SDL3/cmake/android/SdlAndroidFunctions.cmake :137

add_custom_command(
    OUTPUT "${arg_OUTPUT_APK}" "${java_r_path}"
    COMMAND ${command}
    DEPENDS ${depends} ${arg_MANIFEST}
    COMMAND_EXPAND_LISTS
    VERBATIM
  )

RavEngine/RavEngine deps/fmt/CMakeLists.txt :81

add_custom_command(
        OUTPUT ${pcm}
        COMMAND ${CMAKE_CXX_COMPILER}
                -std=c++${std} -x c++-module --precompile -c
                -o ${pcm} ${CMAKE_CURRENT_SOURCE_DIR}/${src}
                "-I$<JOIN:$<TARGET_PROPERTY:${name},INCLUDE_DIRECTORIES>,;-I>"
        # Required by the -I generator expression above.
        COMMAND_EXPAND_LISTS
        DEPENDS ${src})

riidefi/RiiStudio source/cli/CMakeLists.txt :106

add_custom_command(TARGET cli POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_RUNTIME_DLLS:cli> $<TARGET_FILE_DIR:cli> 
    COMMAND_EXPAND_LISTS
  )

MaaAssistantArknights/MaaAssistantArknights src/MaaCore/CMakeLists.txt :32

add_custom_command(
        TARGET MaaCore
        POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different
        "${PROJECT_SOURCE_DIR}/MaaDeps/runtime/${MAADEPS_TRIPLET}/$<$<CONFIG:Debug>:msvc-debug/>"
        $<TARGET_FILE_DIR:MaaCore>
        COMMAND_EXPAND_LISTS)

facebook/folly build/fbcode_builder/CMake/FBThriftCppLibrary.cmake :109

add_custom_command(
    OUTPUT
      ${generated_headers}
      ${generated_sources}
    COMMAND_EXPAND_LISTS
    COMMAND
      "${CMAKE_COMMAND}" -E make_directory "${output_dir}"
    COMMAND
      "${FBTHRIFT_COMPILER}"
      --legacy-strict
      --gen "mstch_cpp2:${GEN_ARG_STR}"
      "${thrift_include_options}"
      -I "${FBTHRIFT_INCLUDE_DIR}"
      -o "${output_dir}"
      "${CMAKE_CURRENT_SOURCE_DIR}/${THRIFT_FILE}"
    WORKING_DIRECTORY
      "${CMAKE_BINARY_DIR}"
    MAIN_DEPENDENCY
      "${THRIFT_FILE}"
    DEPENDS
      ${ARG_DEPENDS}
      "${FBTHRIFT_COMPILER}"
  )

simbody/simbody Simbody/Visualizer/simbody-visualizer/CMakeLists.txt :84

add_custom_command(TARGET simbody-visualizer PRE_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_RUNTIME_DLLS:simbody-visualizer> $<TARGET_FILE_DIR:simbody-visualizer>
            COMMAND_EXPAND_LISTS
        )

root-project/root cmake/modules/RootMacros.cmake :186

add_custom_command(
    OUTPUT ${gensrcdict} ${rootmapname}
    COMMAND ${ROOT_genreflex_CMD}
    ARGS ${headerfiles} -o ${gensrcdict} ${rootmapopts} --select=${selectionfile}
         --gccxmlpath=${GCCXML_home}/bin ${ARG_OPTIONS}
         "-I$<JOIN:$<REMOVE_DUPLICATES:$<FILTER:${include_dirs},EXCLUDE,^$>>,;-I>"
         "$<$<BOOL:$<JOIN:${definitions},>>:-D$<JOIN:${definitions},;-D>>"
    DEPENDS ${headerfiles} ${selectionfile} ${ARG_DEPENDS}

    COMMAND_EXPAND_LISTS
    )

resiprocate/resiprocate repro/CMakeLists.txt :35

add_custom_command ( TARGET repro POST_BUILD
       COMMAND ${CMAKE_COMMAND} -E copy_if_different
       $<TARGET_FILE:BERKELEYDB> $<TARGET_FILE_DIR:repro>
       COMMAND_EXPAND_LISTS
     )

intel/libvpl examples/api1x_core/legacy-decode/CMakeLists.txt :83

add_custom_command(
      TARGET ${TARGET}
      POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${TARGET}>
              $<TARGET_RUNTIME_DLLS:${TARGET}>
      COMMAND_EXPAND_LISTS)

qt/qtbase src/widgets/Qt6WidgetsMacros.cmake :264

add_custom_command(OUTPUT ${outfile}
            DEPENDS ${QT_CMAKE_EXPORT_NAMESPACE}::uic
            COMMAND ${CMAKE_COMMAND} -E ${remove_command} "${file_ui_folder}/${include_folder}"
            COMMAND ${CMAKE_COMMAND} -E make_directory ${inc_dir_to_create}
            COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::uic ${ui_options} -o
            ${outfile} ${infile}
            COMMAND_EXPAND_LISTS
            MAIN_DEPENDENCY ${infile} VERBATIM)

NauEngine/NauEnginePublic engine/3rdparty_libs/fmt/CMakeLists.txt :81

add_custom_command(
          OUTPUT ${pcm}
          COMMAND ${CMAKE_CXX_COMPILER}
          -std=c++${std} -x c++-module --precompile -c
          -o ${pcm} ${CMAKE_CURRENT_SOURCE_DIR}/${src}
          "-I$<JOIN:$<TARGET_PROPERTY:${name},INCLUDE_DIRECTORIES>,;-I>"
          # Required by the -I generator expression above.
          COMMAND_EXPAND_LISTS
          DEPENDS ${src})

ComputationalBiomechanicsLab/opensim-creator libopensimcreator/testing/CMakeLists.txt :54

add_custom_command(
        TARGET TestOpenSimCreator
        PRE_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:TestOpenSimCreator> $<TARGET_RUNTIME_DLLS:TestOpenSimCreator>
        COMMAND_EXPAND_LISTS
    )

mozilla-mobile/mozilla-vpn-client scripts/cmake/osxtools.cmake :210

add_custom_command(TARGET ${TARGET} POST_BUILD
            COMMAND_EXPAND_LISTS
            COMMAND ${COMMENT_ECHO_COMMAND} "Bundling embedded.provisionprofile"
            COMMAND ${CMAKE_COMMAND} -E copy ${BEST_PROFILE} $<TARGET_BUNDLE_CONTENT_DIR:${TARGET}>/embedded.provisionprofile
        )

intel/intel-graphics-compiler IGC/BiFModule/CMakeLists.txt :657

add_custom_command(
    OUTPUT "${IGC_BUILD__BIF_DIR}/OCLBiFImpl.h" "${IGC_BUILD__BIF_DIR}/OCLBiFImpl.bifbc"
    COMMAND $<TARGET_FILE:BiFManager-bin> "${IGC_BUILD__BIF_DIR}/OCLBiFImpl.bc" "${IGC_BUILD__BIF_DIR}/IGCsize_t_32.bc" "${IGC_BUILD__BIF_DIR}/IGCsize_t_64.bc" "${IGC_BUILD__BIF_DIR}/OCLBiFImpl.bifbc" "${IGC_BUILD__BIF_DIR}/OCLBiFImpl.h"
    DEPENDS "${IGC_BUILD__BIF_DIR}/OCLBiFImpl.bc" "${IGC_BUILD__BIF_DIR}/IGCsize_t_32.bc" "${IGC_BUILD__BIF_DIR}/IGCsize_t_64.bc"$<TARGET_FILE:BiFManager-bin>
    COMMENT "BiF: ${IGC_BUILD__BIF_DIR}/OCLBiFImpl.bc: Spliting output .bc."
    COMMAND_EXPAND_LISTS
)

halide/Halide cmake/BundleStatic.cmake :80

add_custom_command(
            TARGET "${TARGET}" POST_BUILD
            COMMAND "${LIB}" "/out:$<TARGET_FILE:${TARGET}>" "$<TARGET_FILE:${TARGET}>.tmp" "${cmd}"
            COMMAND_EXPAND_LISTS
            VERBATIM
        )

luxonis/depthai-core docs/CMakeLists.txt :32

add_custom_command(OUTPUT ${DOXYGEN_INDEX_FILE}
                   DEPENDS "${header_files}"
                   COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT}
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                   MAIN_DEPENDENCY ${DOXYFILE_OUT} ${DOXYFILE_IN}
                   COMMENT "Generating docs"
                   VERBATIM
                   COMMAND_EXPAND_LISTS)

LMMS/lmms plugins/LadspaEffect/cmt/CMakeLists.txt :16

add_custom_command(
		TARGET cmt
		POST_BUILD
		COMMAND "${STRIP_COMMAND}" "$<TARGET_FILE:cmt>"
		VERBATIM
		COMMAND_EXPAND_LISTS
	)

qpdf/qpdf qpdf/CMakeLists.txt :87

add_custom_command(
        TARGET qpdf POST_BUILD
        COMMAND
            ${CMAKE_COMMAND} -E copy_if_different
                $<TARGET_FILE:libqpdf>
                $<TARGET_FILE_DIR:qpdf>
        VERBATIM
        COMMAND_EXPAND_LISTS)

fluffos/fluffos src/thirdparty/fmt/CMakeLists.txt :81

add_custom_command(
        OUTPUT ${pcm}
        COMMAND ${CMAKE_CXX_COMPILER}
                -std=c++${std} -x c++-module --precompile -c
                -o ${pcm} ${CMAKE_CURRENT_SOURCE_DIR}/${src}
                "-I$<JOIN:$<TARGET_PROPERTY:${name},INCLUDE_DIRECTORIES>,;-I>"
        # Required by the -I generator expression above.
        COMMAND_EXPAND_LISTS
        DEPENDS ${src})

isledecomp/isle-portable CMakeLists.txt :527

add_custom_command(TARGET isle POST_BUILD
      COMMAND "${CMAKE_COMMAND}" -E copy $<TARGET_RUNTIME_DLLS:isle> "$<TARGET_FILE_DIR:isle>"
      COMMAND_EXPAND_LISTS
    )

swiftlang/swift cmake/modules/AddPureSwift.cmake :481

add_custom_command(
      TARGET ${name}
      POST_BUILD
      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate $<TARGET_FILE:${name}> $<TARGET_OBJECTS:${name}>
      COMMAND_EXPAND_LISTS
      COMMENT "Update mtime of executable outputs workaround")

OpenMS/OpenMS cmake/add_library_macros.cmake :262

add_custom_command(TARGET ${openms_add_library_TARGET_NAME} POST_BUILD
              COMMAND "${if_runtime_dlls_copy}"
              COMMAND_EXPAND_LISTS
              )

Lewuathe/mlir-hello thirdparty/llvm-project/compiler-rt/cmake/Modules/AddCompilerRT.cmake :417

add_custom_command(TARGET ${libname}
          POST_BUILD
          COMMAND ${CODESIGN} --sign - ${EXTRA_CODESIGN_ARGUMENTS} $<TARGET_FILE:${libname}>
          WORKING_DIRECTORY ${COMPILER_RT_OUTPUT_LIBRARY_DIR}
          COMMAND_EXPAND_LISTS
        )

Italink/HelloVulkan 02-Advance/CMakeLists.txt :42

add_custom_command(TARGET Ex08-AssimpLoadSkeletonMesh PRE_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:assimp> $<TARGET_FILE_DIR:Ex08-AssimpLoadSkeletonMesh>
    COMMAND_EXPAND_LISTS
)

qt/qtwebengine cmake/Functions.cmake :317

add_custom_command(
        OUTPUT
            ${arg_OUTPUT}
            ${arg_BUILDDIR}/${arg_TARGET} # use generator expression in CMAKE 3.20
        BYPRODUCTS ${arg_BYPRODUCTS}
        COMMENT "Running ninja for ${arg_TARGET} in ${arg_BUILDDIR}"
        COMMAND Ninja::ninja
            ${ninja_flags}
            -C ${arg_BUILDDIR}
            ${arg_TARGET}
        USES_TERMINAL
        VERBATIM
        COMMAND_EXPAND_LISTS
        DEPENDS run_${arg_MODULE}_NinjaReady ${arg_DEPENDS}
    )

srcML/srcML src/libsrcml/CMakeLists.txt :56

add_custom_command(
          OUTPUT ${LIBSRCML_OBJECT_FILENAME}
          COMMAND ld -r -arch arm64 ${LIBSRCML_OBJECTS} -o libsrcml.arm64.o
          COMMAND ld -r -arch x86_64 ${LIBSRCML_OBJECTS} -o libsrcml.x86_64.o
          COMMAND lipo -create libsrcml.arm64.o libsrcml.x86_64.o -output ${LIBSRCML_OBJECT_FILENAME}
          DEPENDS libsrcml parser antlr
          COMMAND_EXPAND_LISTS
        )

LadybirdBrowser/ladybird UI/cmake/ResourceFiles.cmake :121

add_custom_command(
            OUTPUT ${outputs}
            DEPENDS ${inputs}
            COMMAND "${CMAKE_COMMAND}" -E make_directory "${COPY_DESTINATION}/${subdir}"
            COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${inputs}" "${COPY_DESTINATION}/${subdir}"
            COMMAND_EXPAND_LISTS
            VERBATIM
        )

prusa3d/Prusa-Firmware-Buddy lib/AddPrusaErrorCodes.cmake :18

add_custom_command(
    OUTPUT "${error_codes_header}"
    COMMAND "${Python3_EXECUTABLE}" "${generate_error_codes_py}" "${file}" "${error_codes_header}"
            "${printer_id}" "${printer_code}" $<$<BOOL:${is_mmu}>:--mmu>
    DEPENDS "${file}" "${generate_error_codes_py}"
    VERBATIM COMMAND_EXPAND_LISTS
    )

codeplaysoftware/computecpp-sdk cmake/Modules/FindComputeCpp.cmake :424

add_custom_command(
    OUTPUT ${outputDeviceFile} ${outputSyclFile}
    COMMAND "${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}"
            ${COMPUTECPP_DEVICE_COMPILER_FLAGS}
            "${generated_include_directories}"
            "${generated_compile_definitions}"
            -sycl-ih ${outputSyclFile}
            -o ${outputDeviceFile}
            -c ${ARG_SOURCE}
            ${generate_depfile}
    COMMAND_EXPAND_LISTS
    DEPENDS ${ir_dependencies}
    ${implicit_depends_arg}
    ${depfile_arg}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Building ComputeCpp integration header file ${outputSyclFile}")

mxcop/src-dgi extern/sdl/cmake/android/SdlAndroidFunctions.cmake :137

add_custom_command(
    OUTPUT "${arg_OUTPUT_APK}" "${java_r_path}"
    COMMAND ${command}
    DEPENDS ${depends} ${arg_MANIFEST}
    COMMAND_EXPAND_LISTS
    VERBATIM
  )

drawpile/Drawpile cmake/AddResources.cmake :27

add_custom_command(
				TARGET ${target} PRE_LINK
				COMMAND "${CMAKE_COMMAND}" -E make_directory
					"${ARG_BUILD_TIME_DESTINATION}"
				COMMAND "${CMAKE_COMMAND}" -E create_symlink
					"${CMAKE_CURRENT_SOURCE_DIR}/assets/${dir}"
					"${ARG_BUILD_TIME_DESTINATION}/${dir}"
				COMMAND_EXPAND_LISTS
				COMMENT "Creating symlink to resource ${dir} in build directory"
				VERBATIM
			)

nrfconnect/sdk-zephyr CMakeLists.txt :647

add_custom_command(
    OUTPUT ${PROJECT_BINARY_DIR}/include/generated/zephyr/app_version.h
    COMMAND ${CMAKE_COMMAND} -DZEPHYR_BASE=${ZEPHYR_BASE}
      -DOUT_FILE=${PROJECT_BINARY_DIR}/include/generated/zephyr/app_version.h
      -DVERSION_TYPE=APP
      -DVERSION_FILE=${APPLICATION_SOURCE_DIR}/VERSION
      -DAPP_VERSION_CUSTOMIZATION="$<TARGET_PROPERTY:app_version_h,APP_VERSION_CUSTOMIZATION>"
      ${build_version_argument}
      -P ${ZEPHYR_BASE}/cmake/gen_version_h.cmake
    DEPENDS ${APPLICATION_SOURCE_DIR}/VERSION ${git_dependency}
    COMMAND_EXPAND_LISTS
  )