[CMake] installing without building the whole project

Michael Hertling mhertling at online.de
Thu Jun 9 17:18:42 EDT 2011


On 06/09/2011 03:34 PM, Dominik Szczerba wrote:
> Hi,
> 
> I have a big project with several subfolders. In one subfolder's cmake
> file I have e.g.
> 
> INSTALL(TARGETS test DESTINATION ${CMAKE_INSTALL_PREFIX} CONFIGURATIONS RELEASE)
> 
> Now when I call "make install" on linux or build "INSTALL" project in
> MSVC the whole project is built prior to installation of "test". How
> would I force to only build "test" in this case?
> 
> Many thanks for any hints,
> Dominik

Since the general "install" target always depends on the general "all"
target, you should use a specific "install" target for your binary:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(INSTALL C)
SET(CMAKE_VERBOSE_MAKEFILE ON)
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n")
ADD_EXECUTABLE(main main.c)
INSTALL(TARGETS main
        DESTINATION ${CMAKE_INSTALL_PREFIX}
        CONFIGURATIONS RELEASE)
ADD_CUSTOM_TARGET(install.main
    ${CMAKE_COMMAND}
    -DBUILD_TYPE=${CMAKE_BUILD_TYPE}
    -P ${CMAKE_BINARY_DIR}/cmake_install.cmake)
ADD_DEPENDENCIES(install.main main)

The custom target install.main depends on the main target only and
invokes the cmake_install.cmake script; the desired configuration is
passed to this script via the BUILD_TYPE parameter, or alternatively
CMAKE_INSTALL_CONFIG_NAME, i.e. the script does not install anything
if CMAKE_INSTALL_CONFIG_NAME doesn't match one of the CONFIGURATIONS
in the INSTALL() command. This has been tested on *nix, but I assume
it works similar on Windows; inspect the cmake_install.cmake script
there to find out which parameter must be passed for configurations
selection. Note that the custom commands' "generator expressions"
can be used in custom targets, too - undocumented - so you might
pass the configuration as $<CONFIGURATION> to the script.

'hope that helps.

Regards,

Michael


More information about the CMake mailing list