30.03.2017, 18:15, "Miller Henry" <millerhe...@johndeere.com>:
> I have found the following projects which all seem to do some variation of a 
> meta build so that you can build multiple projects that depend on each other 
> and manage dependencies. (there are a couple others that seem to not be 
> maintained as well)
>
> https://gradle.org/
> https://bazel.build/
> https://github.com/LLNL/spack
> https://github.com/ruslo/hunter
> http://www.biicode.com
> https://conan.io/
> https://conda.io/

Also, https://github.com/GNOME/jhbuild (notably used by GNOME, WebKit, and 
X.org communities)

>
> Unfortunately I have never found anyone who has actually compared even two of 
> these. None of the projects have good marketing: it appears they somehow 
> solve similar problems, but none actually have defined the problem or their 
> solution. It is like everyone assumes that everyone in the world has their 
> exact same problem and the solution is obvious so the only thing left is the 
> details of implementing it. This of course tells me nothing about if they 
> handle cross compiling (not a common use case but it is yours and mine), what 
> packages they create, what compromises they make, what they expect of my 
> environment... These are important questions: I'm pretty sure that I could 
> eliminate several just by comparing my needs to their features.
>
> I'm currently using an in house system that builds everything in a Docker 
> which lets me ensure nobody is accidentally using the wrong compiler. (we 
> cross compile for a x86 target - 90% of the time if you build with gcc for 
> the local system everything will work just fine, the other 10% of the time 
> our system has an imcompatible version of some library and things blow up 
> when you try to use some uncommon feature). I'm thinking about moving to one 
> of the above, but I haven't actually evaluated anything.
>
> If you do evaluate any of the above please document your experience and in 
> particular what is good/bad about the things you look at.
>
> This is getting off-topic for the cmake mailing list, but I don't know where 
> else to move the conversation.
>
> -----Original Message-----
> From: CMake [mailto:cmake-boun...@cmake.org] On Behalf Of Robert Dailey
> Sent: Wednesday, March 29, 2017 9:39 PM
> To: Florent Castelli <florent.caste...@gmail.com>
> Cc: CMake <cmake@cmake.org>
> Subject: Re: [CMake] Building third party libraries along with normal targets
>
> On Wed, Mar 29, 2017 at 9:32 PM, Florent Castelli 
> <florent.caste...@gmail.com> wrote:
>>  On 30/03/2017 03:54, Robert Dailey wrote:
>>>  On Wed, Mar 29, 2017 at 8:18 PM, Florent Castelli
>>>  <florent.caste...@gmail.com> wrote:
>>>>  This is known as "super build".
>>>>  Yes, this is exactly why I made my Boost CMake build scripts, which
>>>>  you use unless you changed your mind today :)
>>>
>>>  You mean this?
>>>  https://github.com/Orphis/boost-cmake
>>>
>>>  It's on the drawing board, for sure. It's the best solution I've
>>>  found. It's also part of the reason I'm asking this question to begin
>>>  with.
>>>
>>>  Although, this specific method of building boost doesn't use
>>>  superbuild, it uses normal add_subdirectory() with target.
>>
>>  It doesn't "super build" its dependencies, you have to provide them
>>  externally, but it is a possible addition.
>>  But it is designed to be part of a super build environment and is used
>>  as such at some large companies shipping to millions of people.
>>
>>>>  It can be done for other projects as well. Sometimes, they even
>>>>  provide CMake build scripts you can use directly with
>>>>  "add_subdirectory()" so you don't have to write CMake scripts or use
>>>>  "ExternalProject_Add()" (which isn't all great since it doesn't
>>>>  propagate all your current project settings).
>>>
>>>  Long term, I'm thinking a project like hunter[1] would be the best
>>>  choice. The problem with hunter is that it doesn't separate concerns
>>>  between host machine and target host. Specifically, when cross
>>>  compiling.
>>>
>>>  All the superbuild commands assume linux command syntax, simply
>>>  because I specified a toolchain utilizing android NDK. For this
>>>  reason it requires a lot of TLC to get working.
>>>
>>>  [1]: https://github.com/ruslo/hunter
>>
>>  There are those issues and also ABI changing flags that can become an
>>  issue as they aren't always propagated from what I can see.
>>
>>>>  You can use ccache or its Windows variants to make it faster. But
>>>>  you also shouldn't need "ninja clean" most of the time. Possibly,
>>>>  you could just clean a specific target "ninja -t clean foo".
>>>>  If you declare all your dependencies properly, then you could just
>>>>  always run "ninja" and the build will just be correct.
>>>>  If your purpose is to see the compiler output again (to fix
>>>>  warnings), it is acceptable to clean and rebuild (with ccache it
>>>>  should be fast enough).
>>>>  Personally, I just have a very long history in my terminal and
>>>>  scroll back or pipe the build content to a file to look at it later.
>>>>  Some IDEs will also record all the compilation output and make it
>>>>  available later (Xcode does it), then it's less of an issue.
>>>
>>>  Never used ccache before, what does it do? Also if even if you ninja
>>>  -t to clean, it will also clean dependencies. So if I specify those
>>>  in-project dependencies that actually build third party libs, those
>>>  will be cleaned too.
>>
>>  It's a program you use to record compilation outputs and save them to
>>  a disk cache. If you build a file again, instead of compiling it, it
>>  will just fetch the outputs from the cache and return the same
>>  warnings. It's usually a safe optimization in a build pipeline and is
>>  quite easy to use with CMake and Ninja generator.
>>
>>  It works well with GCC or Clang and there are some alternative
>>  versions for the Microsoft compiler too.
>
> At the end of the day, I've solved the Boost problem but I have many other 
> libraries I still manually build: openssl, libpng, zlib, etc.
> It's as you said, maintaining build scripts for all of these will be 
> challenging but I think that's the proper way to go in my specific situation 
> (multi platform). It'll be less maintenance than rebuilding binaries 3x per 
> each.
>
> Do you know how to set up the boost cmake project I linked on github to work 
> with superbuild? And do you prefer your superbuild execution to happen during 
> cmake generate (basically cmake invokes itself for the superbuild) or do you 
> prefer a separate external run, independent of the normal one (basically 2x 
> cmake invocations)?
>
> Do you know of similar projects for other libraries I mentioned? Could hand 
> write my own, but seems better to piggyback on someone else's efforts.
>
> Thanks for your feedback!
> --
>
> 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
> --
>
> 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

-- 
Regards,
Konstantin
-- 

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

Reply via email to