cmake — предотвращение очистки `make clean` от очистки ExternalProject

#build #makefile #cmake

#строить #makefile создать файл #cmake #сборка #makefile

Вопрос:

Мне было интересно, есть ли какой-нибудь способ предотвратить make clean повторное создание внешних зависимостей в cmake. Я использую ExternalProject для создания сторонних библиотек c , и их не нужно перестраивать, даже если я это сделаю make clean .

С другой стороны, я мог бы захотеть создать новое правило, скажем, make really-clean , которое даже очищает зависимости. есть ли хороший способ сделать это?

Спасибо.

Ответ №1:

Я предполагаю, что вы используете ADD_CUSTOM_COMMAND, или ADD_LIBRARY, или другой ADD_ * для создания файлов зависимостей.

Если у вашего ExternalProject есть собственный каталог, и вы можете поместить CMakeLists.txt в этот каталог, вы можете легко поместить в него следующее CMakeLists.txt :

 SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM 1)
  

Таким образом, эти файлы зависимостей не будут очищены.

Если нет, возможно, вам придется избегать размещения внешних зависимостей в качестве выходных файлов. Например, если вы используете

 ADD_CUSTOM_COMMAND(OUTPUT libdep
   COMMAND dep_gen_cmd
   ....
)

ADD_CUSTOM_COMMAND(OUTPUT prj
   ....
   DEPENDS libdep
)
  

затем вам нужно изменить его на:

 ADD_CUSTOM_TARGET(libdep_gen
      COMMAND dep_gen_cmd
      ...
)

ADD_CUSTOM_COMMAND(OUTPUT prj
     COMMAND test -e libdep || make libdep_gen
     ...
)