В CMake есть проблема с зависимостями между проектом с динамически загружаемой библиотекой (DLL) и проектом, который эту DLL использует.
При изменении только CPP файла в DLL проекте, перестраивается только один проект, а зависящие от него скрипты, например копирование DLL, не срабатывают и остальные проекты продолжат использовать старую DLL.
Решение есть, хоть и не самое удобное:
* код создает пустой CPP файл при компиляции "DllProject".
* добавляем СPP файл в проект, который использует DLL
Теперь при компиляции "DllProject" будет принудительно компилироваться "ExeProject" и запустятся все связаные с ним скрипты сборки.
Так как меняется только один CPP файл, то скорость сборки замедляется незначительно.
#cmake #snippets
При изменении только CPP файла в DLL проекте, перестраивается только один проект, а зависящие от него скрипты, например копирование DLL, не срабатывают и остальные проекты продолжат использовать старую DLL.
Решение есть, хоть и не самое удобное:
* код создает пустой CPP файл при компиляции "DllProject".
set( DllProject.trigger "DllProject.trigger.cpp" CACHE INTERNAL "" FORCE )
add_custom_command( TARGET "DllProject" POST_BUILD COMMAND ${CMAKE_COMMAND} -E touch "${DllProject.trigger}" )
* добавляем СPP файл в проект, который использует DLL
add_dependencies( "ExeProject" "DllProject" )
target_sources( "ExeProject" PRIVATE "${DllProject.trigger}" )
set_property( SOURCE "${DllProject.trigger}" PROPERTY GENERATED 1 )
Теперь при компиляции "DllProject" будет принудительно компилироваться "ExeProject" и запустятся все связаные с ним скрипты сборки.
Так как меняется только один CPP файл, то скорость сборки замедляется незначительно.
#cmake #snippets