[CMake] Build only what you need in third party libs

Brian Davis bitminer at gmail.com
Tue Dec 8 10:26:48 EST 2009


See below

On Mon, Dec 7, 2009 at 1:26 PM, troy d. straszheim <troy at resophonic.com>wrote:

> Michael Jackson wrote:
>
>>
>>
>> On Dec 7, 2009, at 1:28 PM, troy d. straszheim wrote:
>>
>>  Michael Jackson wrote:
>>>
>>>> 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?
>>>>
>>>
>>> Here's what I came up with:
>>>
>>>
>>> http://sodium.resophonic.com/boost-cmake/current-docs/exported_targets.html#with-boost-source-in-a-subdirectory-of-your-source
>>>
>>> the EXCLUDE_FROM_ALL option to add_subdirectory makes things remarkably
>>> easy... nice feature.
>>>
>>> -t
>>>
>>
Yes this appears to be the closest thing to what I would like to do.



>
>>
>> Nice,
>>   Couple of comments though:
>> "Setting BUILD_PROJECTS, etc is unnecessary, but if all the extra boost
>> targets bother you you can set it at the commandline as usual:"
>>
>> Why can't I set BUILD_PROJECTS in my own CMakeLists.txt file? Wouldn't
>> this get rid of the need to pass this on the command line? Also what about
>> those running CMake-GUI? They don't have a command line to work from?
>>
>
> Yup, you can, it needs to be CACHE STRING FORCE.
>
>
I am already taking advantage of CACHE STRING FORCE for multiple parameters
to provide "checkout and build" automation with out having to specify these
variables each time.  I only wish I could do this for the text box "Where to
build the Binaries" i.e. the ability to fill this in with a default as I
build out of source, but within the checkout directory structure (
rootofcheckout/source and rootofcheckout/build).  This way it would be a 3
step to development for developers 1) checkout tree and 2) point cmake to
CMakeLists.txt and 3) press go.


>
>   By using the name of the target (boost_filesystem-mt-shared in your
>> example), will CMake automatically "do the right thing" with respect to
>> Debug and release libraries? Will building my project as a Debug pick up the
>> Debug Boost libraries?
>>
>
> No, boost-cmake doesn't play nice with this kind of thing.  In the
> beginning we were attempting to do things the way bjam does them, compiling
> all variants with one command.  In retrospect I think this was a really bad
> idea.  Now things clash, and it would be major surgery to fix... major
> surgery that I may yet do, but realize that it would break a growing amount
> of code that depends on the way boost-cmake now does things.  :(
>
> You could check CMAKE_BUILD_TYPE and tweak the name that you're linking
> against:
>
> if (CMAKE_BUILD_TYPE STREQUAL Debug)
>  set(DBG_OR_RELEASE "-debug")
> endif()
>
> target_link_libraries(mything boost_filesystem-mt-shared${DBG_OR_RELEASE})
>
>
The do the right thing feature of bjam was quite nice.  This is what I was
looking for in CMake as well.  It sounds from this discussion that it is a
boost usage of CMake issue not a CMake issue correct or no?  Not sure this
is a "solution".




>   I see this as having some issues? I now have to detect when someone wants
>> a "Debug" build then set the "BOOST_ENABLE_DEBUG=ON" before calling the
>> add_subdirectory(boost-src).
>>
>
> If you just let boost.cmake configure all the targets, use EXCLUDE_FROM_ALL
> and tweak the name you link to above, only what you need gets built, and
> your CMAKE_BUILD_TYPE works as you expect it to. The same name-tweaking
> above will work if you use exported targets instead of
> boost-src-in-subdirectory.
>
>
ouch... ok will keep this in mind.


>   I say all this without having tried any of this but it _is_ intriguing me
>> currently due to all the problems trying to get Boost built OS X and Windows
>> without memory leaks, compile errors and, ya know, basic stuff like that. If
>> I can have my own patched version of boost in my project this may save some
>> serious head aches in the future.
>>
>
>
> And on the boost-cmake list we should talk about what those patches would
> be.  You're not the only one doing this, and we have the capacity to do
> point releases of boost asynchronously from upstream.
>
> -t
>
>

>
>
>
> _______________________________________________
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20091208/dec6f4f4/attachment.htm>


More information about the CMake mailing list