Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cmake - preventing `make clean` from cleaning ExternalProject

I was wondering if there's some way to prevent make clean in cmake from re-building external dependencies. I'm using ExternalProject to build third party c++ libraries, and they do not have to be rebuilt even if I do make clean.

On the other hand, I might want to create a new rule, say, make really-clean, which even clears the dependencies. is there a good way to do this?

Thanks.

like image 431
Jeeyoung Kim Avatar asked Oct 11 '22 20:10

Jeeyoung Kim


1 Answers

I assume you use ADD_CUSTOM_COMMAND, or ADD_LIBRARY or other ADD_* to create the dependency files.

If your ExternalProject has it's own directory and you can put CMakeLists.txt in that directory, you can easy put following in that CMakeLists.txt:

SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM 1)

So those dependency files won't get cleaned.

If not, you may need to avoid to put the external dependencies as the output files. For example, if you use

ADD_CUSTOM_COMMAND(OUTPUT libdep
   COMMAND dep_gen_cmd
   ....
)

ADD_CUSTOM_COMMAND(OUTPUT prj
   ....
   DEPENDS libdep
)

then you need to change it to:

ADD_CUSTOM_TARGET(libdep_gen
      COMMAND dep_gen_cmd
      ...
)

ADD_CUSTOM_COMMAND(OUTPUT prj
     COMMAND test -e libdep || make libdep_gen
     ...
)
like image 151
umesh pant Avatar answered Oct 16 '22 14:10

umesh pant