[CMake] What is the purpose of INSTALL_DIR in ExternalProject_Add command?

Cedric Doucet cedric.doucet at inria.fr
Fri Apr 10 04:51:33 EDT 2015


Hello,

I have tried to use INSTALL_DIR in the configuration command but I may do something wrong:

  ExternalProject_Add(${LIBRARY}
                      INSTALL_DIR ${CMAKE_BINARY_DIR}/external/${LIBRARY}/install
                      DOWNLOAD_COMMAND wget http://bitbucket.org/eigen/eigen/get/${EIGEN_VERSION}.tar.gz && tar xvzf ${EIGEN_VERSION}.tar.gz -C ../src --strip-components=1
                      CONFIGURE_COMMAND cd ../build && cmake -D CMAKE_INSTALL_PREFIX=${INSTALL_DIR} ../src
                   )

I get the following error message : 

    CMake Error at cmake_install.cmake:38 (FILE):
      file cannot create directory: /include/eigen3.  Maybe need administrative
      privileges.

But if I replace INSTALL_DIR by its value in the configuration command,

    CONFIGURE_COMMAND cd ../build && cmake -D CMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/external/${LIBRARY}/install ../src

everything works fine.

Could you explain me how to use INSTALL_DIR?

Cédric

----- Mail original -----
> De: "Cedric Doucet" <cedric.doucet at inria.fr>
> À: cmake at cmake.org
> Envoyé: Jeudi 9 Avril 2015 15:53:56
> Objet: Re: [CMake] What is the purpose of INSTALL_DIR in ExternalProject_Add command?
> 
> 
> Hello Theodore,
> 
> thank you for your help.
> 
> Well, indeed it greatly depends on the system and the user.
> Neverteless, you can alaways provide your own value of CONFIGURATION_COMMAND
> to install your libraries in the same directory or in different ones.
> It does not depend on INSTALL_DIR at all.
> You don't need INSTALL_DIR to do that.
> It is more convenient to do it at the command line 'cmake -D
> MY_INSTALL_PREFIX' and make CONFIGURE_COMMAND depend on the value
> MY_INSTALL_PREFIX (or CMAKE_INSTALL_PREFIX if you want).
> 
> But do you understand what INSTALL_DIR do?
> 
> For example, what are the differences between this call
> 
> ExternalProject_Add(eigen
>                     PREFIX third_party
>                     INSTALL_DIR third_party/eigen/install
>                     DOWNLOAD_COMMAND wget
>                     http://bitbucket.org/eigen/eigen/get/3.2.4.tar.gz && tar
>                     xvzf 3.2.4.tar.gz -C ../src --strip-components=1
>                    )
> 
> and this one
> 
> ExternalProject_Add(eigen
>                     PREFIX third_party
>                     DOWNLOAD_COMMAND wget
>                     http://bitbucket.org/eigen/eigen/get/3.2.4.tar.gz && tar
>                     xvzf 3.2.4.tar.gz -C ../src --strip-components=1
>                    )
> ?
> 
> What is the default value of INSTALL_DIR?
> What does setting INSTALL_DIR to a value do?
> 
> I am sorry if I miss something, but I really try to understand your answers.
> I realize that I don't understand what mechanism is behind setting
> INSTALL_DIR to a value.
> 
> In the documentation
> (http://www.cmake.org/cmake/help/v3.2/module/ExternalProject.html?highlight=external#command:externalproject_add),
> it is written "Installation prefix".
> But what does it mean?
> What is actually done with the value of INSTALL_DIR?
> 
> Cédric
> 
> 
> ----- Mail original -----
> > De: "Theodore Papadopoulo" <Theodore.Papadopoulo at inria.fr>
> > À: cmake at cmake.org
> > Envoyé: Jeudi 9 Avril 2015 15:08:13
> > Objet: Re: [CMake] What is the purpose of INSTALL_DIR in
> > ExternalProject_Add command?
> > 
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> > 
> > On 04/09/2015 01:26 PM, Ryan Pavlik wrote:
> > > It's for if your use case requires the project to be installed in
> > > a specific location that's not the automatically generated one.
> > > For instance, if you're building multiple external projects you
> > > might have them all install to the same subdirectory of the binary
> > > directory for convenience.
> > > 
> > > Ryan
> > 
> > I personally believe that you should never use the files constructed
> > in the build directory. This can work for binaries or static libraries
> > but is a point of failure with dynamic libraries (often the relative
> > paths of those are different in the final install).
> > 
> > One case where installing is absolutely necessary (at least in my
> > somewhat limited experience); windows, which requires that all the
> > dynamic libraries used by a program to be in the smae install directory.
> > 
> > 	Hope it help a little.
> > 
> > 	Theo.
> > 
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v2
> > 
> > iEYEARECAAYFAlUmeb0ACgkQEr8WrU8nPV2U8QCeKO8ldeKUnQHktROVz1uzo0x6
> > ZDQAoJOL8KciN9pq5H+09tmSRhqSqiQ6
> > =J+yG
> > -----END PGP SIGNATURE-----
> > --
> > 
> > Powered by www.kitware.com
> > 
> > Please keep messages on-topic and check the CMake FAQ at:
> > http://www.cmake.org/Wiki/CMake_FAQ
> > 
> > Kitware offers various services to support the CMake community. For more
> > information on each offering, please visit:
> > 
> > CMake Support: http://cmake.org/cmake/help/support.html
> > CMake Consulting: http://cmake.org/cmake/help/consulting.html
> > CMake Training Courses: http://cmake.org/cmake/help/training.html
> > 
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> > 
> > Follow this link to subscribe/unsubscribe:
> > http://public.kitware.com/mailman/listinfo/cmake
> > 
> 


More information about the CMake mailing list