On 07/02/2011 04:34 AM, Tim Gallagher wrote:
> Hi,
> 
> We have a project that has a main executable and dozens of utility 
> executables that may or may not be needed. We can add an executable for each 
> util with EXCLUDE_FROM_ALL defined so just typing make only does the main 
> code and something like 'make grid' compiles the grid generator. 
> 
> But, how can we install these things? I see from the documentation that if 
> EXCLUDE_FROM_ALL is set to true, the behavior is undefined. More generally, 
> is there a way to set 'make install' to only install things that have been 
> built (rather than the current behavior which is to build the default target 
> if it's not built)? 
> 
> A work around would be to create custom install targets that use the cmake 
> copy command to manually move the utility executable to the install 
> directory, but it would be nice if 'make install' installed all targets built 
> without building unbuilt ones...
> 
> Thanks,
> 
> Tim

You might use the OPTIONAL flag of INSTALL(TARGETS ...), cf. [1,2]:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(OPTIONAL C)
SET(CMAKE_VERBOSE_MAKEFILE ON)
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n")
FILE(WRITE ${CMAKE_BINARY_DIR}/utility1.c "int main(void){return 0;}\n")
FILE(WRITE ${CMAKE_BINARY_DIR}/utility2.c "int main(void){return 0;}\n")
FILE(WRITE ${CMAKE_BINARY_DIR}/utility3.c "int main(void){return 0;}\n")
ADD_EXECUTABLE(main main.c)
ADD_EXECUTABLE(utility1 EXCLUDE_FROM_ALL utility1.c)
ADD_EXECUTABLE(utility2 EXCLUDE_FROM_ALL utility2.c)
ADD_EXECUTABLE(utility3 EXCLUDE_FROM_ALL utility3.c)
INSTALL(TARGETS main
    RUNTIME DESTINATION bin
)
INSTALL(TARGETS utility1 utility2 utility3
    RUNTIME DESTINATION bin OPTIONAL
)

AFAIK, the warning issued w.r.t. EXCLUDE_FROM_ALL can be safely ignored
as long as the respective INSTALL() command includes the OPTIONAL flag.

Regards,

Michael

[1] http://www.mail-archive.com/[email protected]/msg28569.html
[2] http://www.mail-archive.com/[email protected]/msg14997.html
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to