my CMakeLists.txt:
# 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?