On Tue, 12 Apr 2011 03:44:04 +0200, Michael Hertling <[email protected]> wrote: > On 04/11/2011 10:42 PM, Tomasz Grobelny wrote: >> On Monday 11 April 2011 21:55:48 Alexander Neundorf wrote: >>> On Monday 11 April 2011, Tomasz Grobelny wrote: >>>> On Mon, 11 Apr 2011 09:01:09 -0700, Tyler <[email protected]> wrote: >>>>> On Mon, Apr 11, 2011 at 8:54 AM, Tomasz Grobelny >>>>> >>>>> <[email protected]> wrote: >>>>>> Ok, but is there a way to achieve the same effect so that the user >>>>>> can >>>>>> type just "make install" and not know anything about DESTDIR >>>> environment >>>>>> variable (provided he knows about MYDESTDIR)? Maybe it is possible to >>>>>> put this "DESTDIR=$MYDESTDIR" in the generated Makefiles somehow... >>>>> >>>>> If I understand your use case right (which I might not as you haven't >>>>> described what you're trying to do, just how you're trying to do it), >>>>> maybe you can just override CMAKE_INSTALL_PREFIX. >>>>> >>>>> If you go this route, check the archives because of the whole >>>>> _INITIALIZED_TO_DEFAULT aspect of that particular cache variable. >>>> >>>> I already tried playing with CMAKE_INSTALL_PREFIX but the problem was >>>> that value of MYDESTDIR was read (and saved to CMAKE_INSTALL_PREFIX) >>>> only when configuring first time. That's why DESTDIR mechanism comes >>>> closer to what I'm trying to achieve. My use case is something like >>>> that: >>>> 1. User has some default MYDESTDIR to non writable location. >>>> 2. User executes "cmake . && make install". >>>> 3. The installation fails because user has no rights to $MYDESTDIR. >>>> 4. User changes MYDESTDIR to another location (writable this time). >>>> 5. User executes "make install" once again and it should succeed. >>>> >>>> Of course the user could set MYDESTDIR to correct location before >>>> building but people often forget that. Now the tricky part is that >>>> users >>>> are already used to this mechanism (for particular variable name, >>>> called >>>> MYDESTDIR here). So taking different environment variable instead of >>>> DESTDIR would allow me to minimize confusion among users. Otherwise >>>> I'll >>>> just tell them to set yet another variable (DESTDIR). But I would like >>>> to avoid that if at all possible. >>> >>> DESTDIR has a different purpose. >>> Installing to DESTDIR does not necessarily lead to a working and correct >>> installation, mainly when paths are involved, like e.g. RPATH settings. >>> Assuming that CMAKE_INSTALL_PREFIX would be /opt/foo, your executable >>> might >>> get /opt/foo/lib as RPATH, also when installed to $DESTDIR/opt/foo. >>> So they will not have a correct RPATH. >>> You really should set CMAKE_INSTALL_PREFIX. >>> >> I'd like to. But CMAKE_INSTALL_PREFIX does not get recomputed when I >> change >> MYDESTDIR and try to do "make install" again. Or at least I don't know >> how to >> make it behave this way. >> Besides, I don't use RPATH (at least not explicitely, hopefully cmake is >> not >> doing anything nasty behind the scenes). > > But some day, you might want to use RPATH features as they are very > convenient in certain situations, or you might want to incorporate > the installation prefix or derivatives like CMAKE_INSTALL_PREFIX/lib > /${PROJECT_NAME} in your binaries which can be quite convenient, too. > Moreover, you can hardly prevent your project's users to use RPATH on > their own, see the CMAKE_INSTALL_RPATH/CMAKE_BUILD_WITH_INSTALL_RPATH > variables, e.g. In this regard, using the DESTDIR Makefile/environment > variable bears the risk of subtle failures and isn't worth the effort, > IMO. Thus, you should take Alex's warning absolutely seriously, or in > other words: Changing the installation prefix does invalidate your > already built targets, so you do need to reconfigure and rebuild. > > Anyway, see [1] for a chance to add "DESTDIR=$MYDESTDIR" to the > generated Makefiles, provided that you are using GNU Make, but > even this won't work as expected since DESTDIR is hard-coded > in CMake, AFAIK, and due to other reasons. > > [1] http://www.mail-archive.com/[email protected]/msg34344.html > Somewhat hackish (especially this \$\(firstword \$\(MAKEFILE_LIST\)\) part). I've just come up with another solution (probably not less hackish, but simpler and working): set(CMAKE_INSTALL_PREFIX "\$ENV{MYDESTDIR}") -- Regards, Tomasz Grobelny _______________________________________________ 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
