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

RavEngine/RavEngine deps/RGL/deps/DirectXTex/CMakeLists.txt :212

add_custom_command(
            OUTPUT "${COMPILED_SHADERS}/BC6HEncode_EncodeBlockCS.inc"
            MAIN_DEPENDENCY "${PROJECT_SOURCE_DIR}/DirectXTex/Shaders/CompileShaders.cmd"
            DEPENDS ${SHADER_SOURCES}
            COMMENT "Generating HLSL shaders..."
            COMMAND ${CMAKE_COMMAND} -E env CompileShadersOutput="${COMPILED_SHADERS}" $<$<BOOL:${DIRECTX_FXC_TOOL}>:LegacyShaderCompiler=${DIRECTX_FXC_TOOL}> CompileShaders.cmd > "${COMPILED_SHADERS}/compileshaders.log"
            WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/DirectXTex/Shaders"
            USES_TERMINAL)

ezEngine/ezEngine Code/BuildSystem/CMake/CMakeUtils/ezUtilsAndroid.cmake :104

add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
		BYPRODUCTS "${APK_OUTPUT_DIR}/${TARGET_NAME}.apk" "${APK_OUTPUT_DIR}/${TARGET_NAME}.unaligned.apk"
		COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${TARGET_NAME}> ${CONTENT_DIRECTORY_DST}/lib/${ANDROID_ABI}/lib${TARGET_NAME}.so
		COMMAND ${CMAKE_COMMAND} -E copy "${EZ_VULKAN_VALIDATIONLAYERS_DIR}/${ANDROID_ABI}/libVkLayer_khronos_validation.so" ${CONTENT_DIRECTORY_DST}/lib/${ANDROID_ABI}/libVkLayer_khronos_validation.so
		COMMAND pwsh -NoLogo -NoProfile -File ${EZ_ROOT}/Utilities/Android/BuildApk.ps1 -BuildToolsPath "${ANDROID_BUILD_TOOLS}" -ContentDirectory "${CONTENT_DIRECTORY_DST}" -Manifest "${CMAKE_CURRENT_BINARY_DIR}/AndroidManifest.xml" -AndroidPlatformRoot "${ANDROID_PLATFORM_ROOT}" -TargetName "${TARGET_NAME}" -OutDir "${APK_OUTPUT_DIR}" -SignKey "${CONTENT_DIRECTORY_SRC}/debug.keystore" -SignPassword "pass:android"
		USES_TERMINAL
	)

GoSSIP-SJTU/TripleDoggy cmake/modules/TableGen.cmake :149

add_custom_command(OUTPUT ${${project}_TABLEGEN_EXE}
        COMMAND ${tblgen_build_cmd}
        DEPENDS CONFIGURE_LLVM_NATIVE ${target}
        WORKING_DIRECTORY ${LLVM_NATIVE_BUILD}
        COMMENT "Building native TableGen..."
        USES_TERMINAL)

root-project/root interpreter/llvm-project/llvm/cmake/modules/CrossCompile.cmake :131

add_custom_command(OUTPUT "${output_path}"
                     COMMAND ${build_cmd}
                     DEPENDS CONFIGURE_${PROJECT_NAME}_NATIVE ${ARG_DEPENDS} ${host_targets}
                     WORKING_DIRECTORY "${${PROJECT_NAME}_NATIVE_BUILD}"
                     COMMENT "Building native ${target}..."
                     USES_TERMINAL)

GPSBabel/gpsbabel gui/coretool/CMakeLists.txt :26

add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/core_strings.h
                  COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:gpsbabel> ${CMAKE_CURRENT_BINARY_DIR}
                  COMMAND ${CMAKE_COMMAND} -DQTBINDIR=${_qt_bin_dir} -DCURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/coretool.cmake
                  DEPENDS coretool gpsbabel
                  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                  VERBATIM
                  USES_TERMINAL)

Musicoll/Kiwi CMakeLists.txt :270

add_custom_command(TARGET Kiwi POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CRT_LIB} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}" USES_TERMINAL)

jasp-stats/jasp-desktop Tools/CMake/Dependencies.cmake :74

add_custom_command(
      WORKING_DIRECTORY ${readstat_SOURCE_DIR}
      OUTPUT ${readstat_BINARY_DIR}/include/readstat.h
             ${readstat_BINARY_DIR}/lib/libreadstat.a
      COMMAND
	    export CFLAGS=${READSTAT_CFLAGS} && export CXXFLAGS=${READSTAT_CXXFLAGS}
		&& export LIBS=${EXTRA_LIBS_LINK}
		&& ./configure --enable-shared=no --enable-static --prefix=${readstat_BINARY_DIR}
		COMMAND ${MAKE}
      COMMAND ${MAKE} install
	  COMMENT "----- Preparing 'readstat'"
	  USES_TERMINAL)

Governikus/AusweisApp cmake/Tools.cmake :67

add_custom_command(OUTPUT ${DOXYGEN_BIN_DIR} COMMAND ${DOXYGEN_CMD} USES_TERMINAL)

Jackarain/proxy third_party/boost/libs/hana/benchmark/CMakeLists.txt :77

add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${target}.json"
        COMMAND ${RUBY_EXECUTABLE} -r tilt -r "${CMAKE_CURRENT_BINARY_DIR}/measure.rb"
            -e "MEASURE_FILE = '${CMAKE_CURRENT_BINARY_DIR}/${target}.measure.cpp'"
            -e "MEASURE_TARGET = '${target}.measure'"
            -e "json = Tilt::ERBTemplate.new('${CMAKE_CURRENT_BINARY_DIR}/${target}.erb.json').render"
            -e "File.open('${CMAKE_CURRENT_BINARY_DIR}/${target}.json', 'w') { |f| f.write(json) } "
        WORKING_DIRECTORY ${directory}
        DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${target}.erb.json" ${cpp_files}
        VERBATIM USES_TERMINAL
        COMMENT "Generating dataset for ${target}"
    )

pingcap/tiflash contrib/tiflash-proxy-cmake/CMakeLists.txt :81

add_custom_command(OUTPUT ${_TIFLASH_PROXY_LIBRARY}
    COMMENT "Building TiFlash Proxy using ${_TIFLASH_PROXY_BUILD_PROFILE} profile"
    COMMAND ${CMAKE_COMMAND} -E env ${TIFLASH_RUST_ENV} ${_TIFLASH_PROXY_MAKE_COMMAND}
    VERBATIM
    USES_TERMINAL
    WORKING_DIRECTORY ${_TIFLASH_PROXY_SOURCE_DIR}
    DEPENDS "${_TIFLASH_PROXY_SRCS}"
            "${_TIFLASH_PROXY_SOURCE_DIR}/Cargo.lock"
            "${TiFlash_SOURCE_DIR}/rust-toolchain.toml")

eunomia-bpf/bpftime runtime/CMakeLists.txt :117

add_custom_command(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/syscall_id_list.h
  COMMAND /bin/bash ${CMAKE_CURRENT_SOURCE_DIR}/generate_syscall_id_table.sh "${CMAKE_CURRENT_BINARY_DIR}/syscall_id_list.h"
  USES_TERMINAL
)

kokkos/mdspan cmake/metabench.cmake :184

add_custom_command(OUTPUT "${ARGS_OUTPUT}"
        COMMAND "${RUBY_EXECUTABLE}" -r json -r fileutils -r "${METABENCH_RB_PATH}"
            -e "range = (${range}).to_a"
            -e "env = (${ARGS_ENV})"
            -e "data = {}"
            -e "data['key'] = '${ARGS_NAME}'"
            -e "data['scale'] = (${ARGS_SCALE})"
            -e "data['color'] = '${ARGS_COLOR}'"
            -e "data['values'] = measure('${target}', '${path_to_template}', range, env, ${ARGS_MEDIAN_OF})"
            -e "FileUtils.mkdir_p(File.dirname('${ARGS_OUTPUT}'))"
            -e "IO.write('${ARGS_OUTPUT}', JSON.generate(data))"
        DEPENDS "${path_to_template}"
        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
        VERBATIM USES_TERMINAL
    )

bitcoin-sv/bitcoin-sv cmake/modules/NativeExecutable.cmake :11

add_custom_command(
		OUTPUT ${NATIVE_BUILD_TARGET}
		COMMAND ${CMAKE_COMMAND}
			-G "${CMAKE_GENERATOR}"
			"${CMAKE_SOURCE_DIR}"
			"-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"
			"-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${NATIVE_BINARY_DIR}"
		WORKING_DIRECTORY ${NATIVE_BUILD_DIR}
		VERBATIM USES_TERMINAL
	)

NVIDIA/MDL-SDK src/mdl/jit/llvm/dist/cmake/modules/CrossCompile.cmake :109

add_custom_command(OUTPUT "${output_path}"
                     COMMAND ${build_cmd}
                     DEPENDS CONFIGURE_${PROJECT_NAME}_NATIVE ${ARG_DEPENDS}
                     WORKING_DIRECTORY "${${PROJECT_NAME}_NATIVE_BUILD}"
                     COMMENT "Building native ${target}..."
                     USES_TERMINAL)

Lewuathe/mlir-hello thirdparty/llvm-project/compiler-rt/lib/sanitizer_common/symbolizer/CMakeLists.txt :9

add_custom_command(OUTPUT RTSanitizerCommonSymbolizerInternal.${arch}.o
                     DEPENDS ${RTSanitizerCommonSymbolizerInternalDir} 
                             sanitizer_wrappers.cpp
                             sanitizer_symbolize.cpp
                             scripts/build_symbolizer.sh
                     WORKING_DIRECTORY ${RTSanitizerCommonSymbolizerInternalDir}
                     COMMAND FLAGS=${TARGET_CFLAGS}
                             CLANG=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang
                             ${CMAKE_CURRENT_SOURCE_DIR}/scripts/build_symbolizer.sh
                             ${CMAKE_CURRENT_BINARY_DIR}/RTSanitizerCommonSymbolizerInternal.${arch}.o
                     USES_TERMINAL)

contour-terminal/libunicode src/libunicode/CMakeLists.txt :26

add_custom_command(
        OUTPUT
            "${CMAKE_CURRENT_SOURCE_DIR}/ucd.cpp"
            "${CMAKE_CURRENT_SOURCE_DIR}/ucd.h"
            "${CMAKE_CURRENT_SOURCE_DIR}/ucd_enums.h"
            "${CMAKE_CURRENT_SOURCE_DIR}/ucd_fmt.h"
            "${CMAKE_CURRENT_SOURCE_DIR}/ucd_ostream.h"
        COMMAND ${Python3_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/mktables.py" "${LIBUNICODE_UCD_DIR}"
        DEPENDS mktables.py
        WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
        COMMENT "Generating UCD API and tables from ${LIBUNICODE_UCD_DIR}"
        VERBATIM
        USES_TERMINAL
    )

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}
    )

Z3Prover/z3 cmake/z3_add_component.cmake :118

add_custom_command(OUTPUT "${_output_file}"
      COMMAND "${Python3_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/scripts/pyg2hpp.py" "${_full_pyg_file_path}" "${CMAKE_CURRENT_BINARY_DIR}"
      MAIN_DEPENDENCY "${_full_pyg_file_path}"
      DEPENDS "${PROJECT_SOURCE_DIR}/scripts/pyg2hpp.py"
              ${Z3_GENERATED_FILE_EXTRA_DEPENDENCIES}
      COMMENT "Generating \"${_full_output_file_path}\" from \"${pyg_file}\""
      WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
      USES_TERMINAL
      VERBATIM
    )

afni/afni src/nifti/cmake/nifti_macros.cmake :85

add_custom_command(
      OUTPUT ${MAN_PAGE}
      DEPENDS ${MAN_DEPENDS}
      WORKING_DIRECTORY ${MAN_DIR}
      COMMAND ${HELP2MAN} $<TARGET_FILE:${target}> ${ARG_OPTS} ${INCLUDE_STRING} -o ${MAN_PAGE}
      COMMAND gzip -f ${MAN_PAGE}
      USES_TERMINAL
      COMMENT Generating man page for ${target}
      )