[CMake] problems running a windows build exectuable
Dominik Szczerba
dominik at itis.ethz.ch
Sun Jul 26 08:38:59 EDT 2009
As I was forced to remove the whole tree (as reported in the other
thread) this did not work for me. But now as the problem seems
(temporarlily :) gone maybe I will give it a try. Still, if the build
tree gets invalid and must be re-created the procedure will have to be
repeated. Maybe I should once look into the "install" stuff in cmake...
-- Dominik
On Sun, 2009-07-26 at 08:33 -0400, Michael Jackson wrote:
> I just got in the habit of writing code that copies my 3rd party DLLs
> into the current CMake Binary directory (Like Qt, HDF5.. ). This lets
> me debug my programs with less headaches. Probably not the best/
> optimal solution but does get the job done. I have some really "scary
> cmake" code if you are interested (optimized for the Qt Libraries)..
>
> _________________________________________________________
> Mike Jackson mike.jackson at bluequartz.net
> BlueQuartz Software www.bluequartz.net
> Principal Software Engineer Dayton, Ohio
>
>
>
> On Jul 26, 2009, at 4:08 AM, Dominik Szczerba wrote:
>
> > Many thanks for a very detail and equally helpful explanation.
> > Strictly
> > speaking it does not exactly do what I wanted to achieve (run binaries
> > in place with correctly linked dll's) but greatly simplifies the
> > procedure of copying the runtime files to one folder (without it VS
> > just
> > scatters the files in million separate sub-folders). I will also look
> > into delayed loading.
> > many thanks and regards,
> > Dominik
> >
> > On Sat, 2009-07-25 at 23:21 -0400, Philip Lowman wrote:
> >> On Sat, Jul 25, 2009 at 6:53 PM, Dominik Szczerba
> >> <dominik at itis.ethz.ch> wrote:
> >> When debugging a MSVC target I get a complaint about missing
> >> DLL's. Of
> >> course if I 1) copy all required DLL's to the system folder,
> >> or 2) copy
> >> the exe along with all the DLL's to one separate folder - all
> >> works. But
> >> it's an obvious hassle. How can I run my executables in-place
> >> like on
> >> linux where the lib paths are known (thanks to the linker
> >> flags)? Have I
> >> forgotten anything in the cmake input?
> >>
> >> The commands below will cause all of your generated DLLs & EXEs to be
> >> dumped into a single folder called "bin" in your toplevel directory
> >> unless you're using VS in which case by default it will be bin/
> >> Debug/*
> >> or bin/Release/* etc. Import libraries static or shared will get
> >> dumped in a "lib" folder. If you're using CMake with a WIN32 project
> >> that creates DLLs, you pretty much have to set these variables IMHO
> >> for things to be usable.
> >>
> >> set(CMAKE_RUNTIME_OUTPUT_
> >> DIRECTORY ${CMAKE_BINARY_DIR}/bin)
> >> set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
> >> set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BIINARY_DIR}/bin)
> >>
> >> See...
> >> http://www.cmake.org/cmake/help/
> >> cmake2.6docs.html#prop_tgt:RUNTIME_OUTPUT_DIRECTORY
> >> http://www.cmake.org/cmake/help/
> >> cmake2.6docs.html#prop_tgt:ARCHIVE_OUTPUT_DIRECTORY
> >> http://www.cmake.org/cmake/help/
> >> cmake2.6docs.html#prop_tgt:LIBRARY_OUTPUT_DIRECTORY
> >>
> >> ===
> >>
> >> Also as an aside in case you haven't come across it yet, I highly
> >> recommend a tool called Dependency Walker for investigating DLL
> >> dependencies.
> >>
> >> ===
> >>
> >> To answer your other question, one technique you can use is called
> >> Delay Loaded DLLs (/DELAYLOAD). I have used it before on a limited
> >> basis with some success although it is a bit finicky to setup error
> >> handling for it. It can be made to work if you know exactly where a
> >> DLL is on the hard drive/drives but that is generally a guess at best
> >> so you might not be able to rely on it. It might be worth a look
> >> though.
> >>
> >> I think generally people use the "copy all DLLs to one folder"
> >> approach unless you're dealing with a well maintained system provided
> >> shared library like DirectX. One of the downsides to Windows & DLL
> >> hell :(
> >>
> >>
> >>
> >>
> >> --
> >> Philip Lowman
> >
> > _______________________________________________
> > 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
>
> _______________________________________________
> 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
>
More information about the CMake
mailing list