[CMake] Build only what you need in third party libs
Michael Jackson
mike.jackson at bluequartz.net
Mon Dec 7 12:26:32 EST 2009
Please keep on list so that others may benefit/help
So you are wanting to include the Boost sources in your project and
you just want to build a specific subset of Boost to use with your
project?
I guess I might try setting the
# Set what boost libraries will be built
BUILD_PROJECTS=file_system;system
# Configure the Boost CMake distribution to build
add_subdirectory(boost-cmake0 ${PROJECT_BINARY_DIR}/Boost-Cmake0)
# look at <http://sodium.resophonic.com/boost-cmake/current-docs/exported_targets.html
> for
# more details about the included file. Assuming it is already
generated by the time cmake
# hits this point.
include ( ${PROJECT_BINARY_DIR}/Boost-Cmake0/lib/Exports.cmake )
# Create your executable
add_executable(my_exe ${my_exe_sources} )
# Have your executable link to the boost-file_system library (and
probably the boost-system library)
# Note that the 'boost_file_system' is the actual name of a target
from the Boost-cmake0 sub project.
# See the web page linked above for more details
target_link_libraries ( my_exe boost_file_system)
I have not tried this at all, but this would be my first attempt. The
'target_link_libraries()' command will take care of all the
dependencies for 'my_exe', thus making sure boost-file_system is built
first before building the 'my_exe' executable.
Maybe someone else can comment..
_________________________________________________________
Mike Jackson mike.jackson at bluequartz.net
BlueQuartz Software www.bluequartz.net
Principal Software Engineer Dayton, Ohio
On Dec 7, 2009, at 11:47 AM, Brian Davis wrote:
> Yes this looks like an option. Thanks for the lead. It is not
> quite what I was expecting.
>
> This seems specific to Boost Libraries. Which brings up 2 questions:
>
> Is there a generic way do this for any third party source tree?
> Is there going to be CMAKE variable name resolution clash potential
> without namespace resolution within CMake (or is there already this
> problem or have I missed something)?
>
> What I would like to do is set (please bear with me as I am a
> complete nube to CMake)
>
> BUILD_PROJECTS=none
>
> Then do
>
> add_subdirectory(boost_source_dir)
>
> project( my_exe )
> add_executable( my_exe mysource.cpp )
> add_library( boost_filesystem SHARED)
> #An IMPORTED library target references a library file located
> outside the project. No rules are generated to build it. <- Too bad
> about this last statement
>
> or
>
> add_dependencies( my_exe boost_filesystem )
>
>
> Is there any mechanism for project level resolution of third party
> source targets such as in bjam boost//boost_filesystem
>
> project
> : requirements <library>../build//boost_filesystem
> <library>/boost/system//boost_system
> <hardcode-dll-paths>true
> ;
>
>
> project boost/filesystem
> : source-location ../src
> : usage-requirements # pass these requirement to dependents
> (i.e. users)
> <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
> <link>static:<define>BOOST_FILESYSTEM_STATIC_LINK=1
> ;
>
> And boost_filesystem's use:
>
> project
> : requirements
> <library>/boost/filesystem//boost_filesystem
> <toolset>msvc:<asynch-exceptions>on
> ;
>
> where some syntax like:
>
> add_subdirectory(boost_source_dir PROJECT boost )
>
> add_dependencies( my_exe boost//boost_filesystem )
>
> or
>
> add_library( boost//boost_filesystem SHARED)
>
>
> allowing the specification and namespace resolution of the 3rdParty
> (boost) library
>
> I know above does not exist as my example question shows, but if it
> does in some other form what is it?
>
> Brian
>
> On Sat, Dec 5, 2009 at 3:45 PM, Mike Jackson <mike.jackson at bluequartz.net
> > wrote:
> I _think_ you _might_ be able to set the BUILD_PROJECTS to
> "file_system;system" then do the "add_subdirectory()".
> Give it a shot and see what happens.
>
> _________________________________________________________
> Mike Jackson mike.jackson at bluequartz.net
> BlueQuartz Software www.bluequartz.net
> Principal Software Engineer Dayton, Ohio
>
>
>
> On Sat, Dec 5, 2009 at 4:15 PM, Brian Davis <bitminer at gmail.com>
> wrote:
> >
> > I have used boost jam before and there was a mechanism to build
> only what
> > you need by specifying dependencies within the boost libraries.
> bjam would
> > then run off calculate deps and build only what I needed. In CMake
> is there
> > such a feature to specify a third party library and specify only
> the targets
> > you need to build as dependencies of my build target?
> >
> > i.e. can I use
> >
> > add_subdirectory( lib/3rdParty/Win32/boost-cmake-1_41_0 ./boost )
> >
> > then create a target that only uses say boost_filesystem and only
> have that
> > built? Or do I need to build the world to get a handful of needed
> dll's that
> > are actually used in my project?
> >
> > --
> > Brian J. Davis
> >
> >
> > _______________________________________________
> > 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
> >
>
>
>
> --
> Brian J. Davis
>
More information about the CMake
mailing list