ExternalProject_Add does not like BINARY_DIR same for multiple packages... Why?
SET( THIRD_PARTY_PACKAGES vtk-5.4.2 dcmtk-3.5.4 boost-cmake-1_41_0 ) foreach( PACKAGE in ${THIRD_PARTY_PACKAGES} ) ExternalProject_Add( ${PACKAGE} DOWNLOAD_COMMAND "" SOURCE_DIR ${TOP}/source/cpp/lib/3rdParty/Win/${PACKAGE} BINARY_DIR ${BUILD_DIR}/ouput/bin INSTALL_DIR ${INSTALL_PREFIX} ) endforeach( PACKAGE ) from VS Studio I get: 1>1>CMake Error at cmake_install.cmake:31 (FILE): 1>1> file cannot create directory: C:/Program Files (x86)/VTK/lib/vtk-5.4. and reading http:///www.kitware.com/products/archive/*kitware_quarterly1009* .*pdf* excerpt: Install step The INSTALL_DIR is underneath the calling project’s binary directory. Use INSTALL_DIR to specify a different location. Note that in addition to setting INSTALL_DIR, you also have to pass -DCMAKE_INSTALL_PREFIX or --prefix to the CMake or configure command. It is not used automatically in the configure step since not all projects follow this convention. # [INSTALL_DIR dir] My projects must fall into the "not all projects follow this convention", but wait Kitware makes vtk and Kitware makes Cmake. Is Kitware not following it's own convention here or is something else going on? I also get when I build dcmtk: 1>CMake Error: The source "C:/projects/NIH2009/source/branches/trunk/source/cpp/lib/3rdParty/Win/dcmtk-3.5.4/CMakeLists.txt" does not match the source "C:/projects/NIH2009/source/branches/trunk/source/cpp/lib/3rdParty/Win/vtk-5.4.2/CMakeLists.txt" used to generate cache. Re-run cmake with a different source directory. Looks like there is some CMake cache cross mojonation going on here I guess I'll try: ExternalProject_Add( ${PACKAGE} DOWNLOAD_COMMAND "" SOURCE_DIR ${TOP}/source/cpp/lib/3rdParty/Win/${PACKAGE} # BINARY_DIR ${BUILD_DIR}/ouput/bin INSTALL_DIR ${INSTALL_PREFIX} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} ) as: C:\projects\NIH2009\source\branches\trunk\platform\tools\cmake-2.8.0-win32-x86\bin>cmake --help-module ExternalProject cmake version 2.8.0 ExternalProject Create custom targets to build projects in external trees The 'ExternalProject_Add' function creates a custom target to drive download, update/patch, configure, build, install and test steps of an external project: ExternalProject_Add(<name> # Name for custom target [DEPENDS projects...] # Targets on which the project depends [PREFIX dir] # Root dir for entire project [LIST_SEPARATOR sep] # Sep to be replaced by ; in cmd lines [TMP_DIR dir] # Directory to store temporary files [STAMP_DIR dir] # Directory to store step timestamps #--Download step-------------- [DOWNLOAD_DIR dir] # Directory to store downloaded files [DOWNLOAD_COMMAND cmd...] # Command to download source tree [CVS_REPOSITORY cvsroot] # CVSROOT of CVS repository [CVS_MODULE mod] # Module to checkout from CVS repo [CVS_TAG tag] # Tag to checkout from CVS repo [SVN_REPOSITORY url] # URL of Subversion repo [SVN_REVISION rev] # Revision to checkout from Subversion repo [URL /.../src.tgz] # Full path or URL of source #--Update/Patch step---------- [UPDATE_COMMAND cmd...] # Source work-tree update command [PATCH_COMMAND cmd...] # Command to patch downloaded source #--Configure step------------- [SOURCE_DIR dir] # Source dir to be used for build [CONFIGURE_COMMAND cmd...] # Build tree configuration command [CMAKE_COMMAND /.../cmake] # Specify alternative cmake executable [CMAKE_GENERATOR gen] # Specify generator for native build [CMAKE_ARGS args...] # Arguments to CMake command line #--Build step----------------- [BINARY_DIR dir] # Specify build dir location [BUILD_COMMAND cmd...] # Command to drive the native build [BUILD_IN_SOURCE 1] # Use source dir for build dir #--Install step--------------- [INSTALL_DIR dir] # Installation prefix [INSTALL_COMMAND cmd...] # Command to drive install after build #--Test step--------------- [TEST_BEFORE_INSTALL 1] # Add test step executed before install step [TEST_AFTER_INSTALL 1] # Add test step executed after install step [TEST_COMMAND cmd...] # Command to drive test ) The *_DIR options specify directories for the project, with default directories computed as follows. If the PREFIX option is given to ExternalProject_Add() or the EP_PREFIX directory property is set, then an external project is built and installed under the specified prefix: TMP_DIR = <prefix>/tmp STAMP_DIR = <prefix>/src/<name>-stamp DOWNLOAD_DIR = <prefix>/src SOURCE_DIR = <prefix>/src/<name> BINARY_DIR = <prefix>/src/<name>-build INSTALL_DIR = <prefix> Otherwise, if the EP_BASE directory property is set then components of an external project are stored under the specified base: TMP_DIR = <base>/tmp/<name> STAMP_DIR = <base>/Stamp/<name> DOWNLOAD_DIR = <base>/Download/<name> SOURCE_DIR = <base>/Source/<name> BINARY_DIR = <base>/Build/<name> INSTALL_DIR = <base>/Install/<name> If no PREFIX, EP_PREFIX, or EP_BASE is specified then the default is to set PREFIX to "<name>-prefix". Relative paths are interpreted with respect to the build directory corresponding to the source directory in which ExternalProject_Add is invoked. If SOURCE_DIR is explicitly set to an existing directory the project will be built from it. Otherwise a download step must be specified using one of the DOWNLOAD_COMMAND, CVS_*, SVN_*, or URL options. The URL option may refer locally to a directory or source tarball, or refer to a remote tarball (e.g. http://.../src.tgz). The 'ExternalProject_Add_Step' function adds a custom step to an external project: ExternalProject_Add_Step(<name> <step> # Names of project and custom step [COMMAND cmd...] # Command line invoked by this step [COMMENT "text..."] # Text printed when step executes [DEPENDEES steps...] # Steps on which this step depends [DEPENDERS steps...] # Steps that depend on this step [DEPENDS files...] # Files on which this step depends [ALWAYS 1] # No stamp file, step always runs [WORKING_DIRECTORY dir] # Working directory for command ) The command line, comment, and working directory of every standard and custom step is processed to replace tokens <SOURCE_DIR>, <BINARY_DIR>, <INSTALL_DIR>, and <TMP_DIR> with corresponding property values. The 'ExternalProject_Get_Property' function retrieves external project target properties: ExternalProject_Get_Property(<name> [prop1 [prop2 [...]]]) It stores property values in variables of the same name. Property names correspond to the keyword argument names of 'ExternalProject_Add'. Defined in: C:/projects/NIH2009/source/branches/trunk/platform/tools/cmake-2.8.0-win32-x86/share/cmake-2.8/Modules/ExternalProject.cmake Leads me to believe that I should use CMAKE_ARGS
_______________________________________________ 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