# add\_custom\_target dependencies

**URL:** https://discourse.cmake.org/t/add-custom-target-dependencies/3342
**Category:** Usage
**Created:** [May 17, 2021, 9:43am UTC](https://discourse.cmake.org/t/add-custom-target-dependencies/3342 "2021-05-17T09:43:36Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![kmosk](https://discourse.cmake.org/user_avatar/discourse.cmake.org/kmosk/32/1279_2.png) [@kmosk](https://discourse.cmake.org/u/kmosk)
#### Post date: [May 17, 2021, 9:43am UTC](https://discourse.cmake.org/t/add-custom-target-dependencies/3342/1 "2021-05-17T09:43:36Z")

</div>

my CMakeLists.txt:

```cmake
# wxFormBuilder generation
set(FORM_BUILDER_PROJECT ${PROJECT_SOURCE_DIR}/source/view/gen.fbp)
set(GENERATED_VIEW_DIR ${PROJECT_SOURCE_DIR}/source/view/generated)
set(GENERATED_VIEW_FILE_CPP ${GENERATED_VIEW_DIR}/gen_view.cpp)
set(GENERATED_VIEW_FILE_H ${GENERATED_VIEW_DIR}/gen_view.h)
set(GENERATED_VIEW_FILES
    ${GENERATED_VIEW_FILE_CPP}
    ${GENERATED_VIEW_FILE_H}
    ${GENERATED_VIEW_DIR}/info.png.h
    ${GENERATED_VIEW_DIR}/logo.png.h)
set(GENERATED_FILES_FIX_SCRIPT
    ${PROJECT_SOURCE_DIR}/cmake/script/wx_string_to_cpp_define.cmake)
add_custom_target(gen_view
    COMMAND ${CMAKE_COMMAND} -E make_directory ${GENERATED_VIEW_DIR}
    COMMAND ${FORMBUILDER_EXE} -g ${FORM_BUILDER_PROJECT}
    COMMAND ${CMAKE_COMMAND} -D filename="${GENERATED_VIEW_FILE_H}" -P ${GENERATED_FILES_FIX_SCRIPT}
    COMMAND ${CMAKE_COMMAND} -D filename="${GENERATED_VIEW_FILE_CPP}" -P ${GENERATED_FILES_FIX_SCRIPT}
    DEPENDS ${FORM_BUILDER_PROJECT}
    BYPRODUCTS ${GENERATED_VIEW_FILES}
    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
    COMMENT "Generating view files from wxformbuilder project"
    SOURCES ${FORM_BUILDER_PROJECT})

add_executable(my_exe WIN32)
...
target_sources(my_exe PRIVATE
    source/main.cpp
    ${GENERATED_VIEW_FILE_CPP}
    ...
    )

```

When I execute `cmake --build cmake-build / --target my_exe` for the first time, the `gen_view` target is built. This is logical. But when I run the same command again, the build of the `gen_view` target starts again, even though I haven’t changed anything and the generated files don’t change either. How to make it so that the `gen_view` assembly is only when `GENERATED_VIEW_FILES` or `FORM_BUILDER_PROJECT` are somehow changed?

---

<div class="post-metadata">

### Author: ![marc.chevrier](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/m/ecb155/32.png) [@marc.chevrier](https://discourse.cmake.org/u/marc.chevrier)
#### Post date: [May 17, 2021, 1:41pm UTC](https://discourse.cmake.org/t/add-custom-target-dependencies/3342/2 "2021-05-17T13:41:36Z")

</div>

This is the expected behavior. As specified in the [documentation](https://cmake.org/cmake/help/latest/command/add_custom_target.html):

> The target has no output file and is _always considered out of date_.  
> Use the [`add_custom_command()`](https://cmake.org/cmake/help/git-master/command/add_custom_command.html#command:add_custom_command) command to generate a file with dependencies.

---

<div class="post-metadata">

### Author: ![kmosk](https://discourse.cmake.org/user_avatar/discourse.cmake.org/kmosk/32/1279_2.png) [@kmosk](https://discourse.cmake.org/u/kmosk)
#### Post date: [May 17, 2021, 2:12pm UTC](https://discourse.cmake.org/t/add-custom-target-dependencies/3342/3 "2021-05-17T14:12:08Z")

</div>

Thnx, is it possible to add the cmake function I wrote to custom\_command?

---

<div class="post-metadata">

### Author: ![marc.chevrier](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/m/ecb155/32.png) [@marc.chevrier](https://discourse.cmake.org/u/marc.chevrier)
#### Post date: [May 17, 2021, 2:56pm UTC](https://discourse.cmake.org/t/add-custom-target-dependencies/3342/4 "2021-05-17T14:56:18Z")

</div>

Yes, [`add_custom_command()`](https://cmake.org/cmake/help/git-master/command/add_custom_command.html#command:add_custom_command) supports `COMMAND` option in the same way as [`add_custom_target()`](https://cmake.org/cmake/help/git-master/command/add_custom_command.html#command:add_custom_target).

Have a look also at options `DEPENDS` and `DEPFILE`.
