[CMake] ExternalProject and clean targets

Michael Hertling mhertling at online.de
Sat Oct 15 03:48:22 EDT 2011


On 10/12/2011 10:22 PM, Lori Pritchett-Sheats wrote:
> 
> I'm building external packages in my CMake system using the 
> ExternalPackages_Add function. When a package is built this way and I 
> execute a 'make clean' at the top of my build tree,  all targets are 
> cleaned including the external packages. Is there a way to remove the 
> external package targets from the the default clean target?

The following exemplary project does not exhibit this behavior:

# CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(CLEAN C)
SET(CMAKE_VERBOSE_MAKEFILE ON)
INCLUDE(ExternalProject)
ExternalProject_Add(external
    SOURCE_DIR ${CMAKE_SOURCE_DIR}/external
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>)
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n")
ADD_EXECUTABLE(main main.c)
ADD_DEPENDENCIES(main external)
INSTALL(TARGETS main DESTINATION bin)

# external/CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(EXTERNAL C)
SET(CMAKE_VERBOSE_MAKEFILE ON)
FILE(WRITE ${CMAKE_BINARY_DIR}/f.c "void f(void){}\n")
ADD_LIBRARY(f SHARED f.c)
INSTALL(TARGETS f DESTINATION lib)

After configuring and building:

% ls main external-prefix/src/external-build/libf.so
external-prefix/src/external-build/libf.so  main

After "make clean" in CMAKE_BINARY_DIR:

% ls main external-prefix/src/external-build/libf.so
ls: cannot access main: No such file or directory
external-prefix/src/external-build/libf.so

The top-level project's target is gone whereas the external project's
one is intact, and [1] reports the same, i.e. the opposite of your
concern. Thus, could you boil down your issue to a minimal but
self-contained example for further investigation?

Regards,

Michael

[1] http://www.mail-archive.com/cmake@cmake.org/msg35411.html


More information about the CMake mailing list