On Fri, Jan 29, 2010 at 4:07 PM, Brian Davis <bitmi...@gmail.com> wrote:
> ExternalProject_Add does not like BINARY_DIR same for multiple packages... > Why? > To avoid one package's output from clobbering another package's output. For CMake built projects, for example, the BINARY_DIR is where CMakeCache.txt ends up. There can only be one CMakeCache.txt in a directory, so there can only be one project for each BINARY_DIR. > 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 ) > Instead of "BINARY_DIR ${BUILD_DIR}/ouput/bin", try: BINARY_DIR ${BUILD_DIR}/${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? > "Kitware projects" are built with CMake and all use CMAKE_INSTALL_PREFIX to determine the install directory. You should use CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} for "Kitware projects" > > 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 This is because of using the same BINARY_DIR for multiple ExternalProject_Add calls. > 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 > > Is it getting any easier yet...? Hopefully this is helpful, David
_______________________________________________ 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