У меня довольно сложная конфигурация CMake, которая содержит несколько команд execute_process
, которые создают файлы на этапе настройки. Иногда после некоторых изменений в конфигурации CMake этап генерации удаляет эти файлы. Я могу воспроизвести это.
Я проверил, что файлы существуют после стадии конфигурации, но исчезли после генерации Makefile и перед тем, как фактически вызвать make
.
Файлы созданы в некоторыхслучаи просто на ${CMAKE_COMMAND} -E copy
, а в других случаях - на вызов скрипта с ${CMAKE_COMMAND} -P
, который содержит вызов configure_file
для замены некоторых заполнителей в шаблоне.
Файлы создаются в дереве исходного кода. Их цель - предоставить разработчику некоторый исходный код. После того, как разработчик отредактировал файлы, они должны перейти на контроль версий и не должны быть заново созданы, если они отсутствуют. У меня есть add_custom_command
s для воссоздания файлов, если они отсутствуют, но они не виновны.
Я знаю, вы бы предпочли простой тестовый пример, но, к сожалению, это не так просто создать, поэтому мой вопрос:
В чем может быть причина и как я могу это отладить?
К сожалению, --trace
опции cmake
не даютлюбые данные журнала об этапе генерации.
Версии
- ОС: Ubuntu 16.04
- CMake 3.5.1 (принадлежит Ubuntu 16.04)
Обновление
Я сам скомпилировал CMake с текущим мастер-коммитом (696b2d4), и его поведение остается прежним.
Запустив CMake под отладчиком, я обнаружил, чтострока
cmSystemTools::RemoveFile(fname);
в функции cmGlobalGenerator::CheckRuleHashes(std::string const& pfile, std::string const& home)
фактически удаляет файлы. Он вызывается с cmGlobalGenerator::Generate()
.