Opened 7 years ago
Last modified 5 years ago
#7080 closed enhancement
Migrate build system to CMake — at Initial Version
Reported by: | miurahr | Owned by: | warmerdam |
---|---|---|---|
Priority: | normal | Milestone: | closed_because_of_github_migration |
Component: | ConfigBuild | Version: | svn-trunk |
Severity: | major | Keywords: | cmake |
Cc: |
Description
There were initiatives to migrate build system to CMake in 2012-2013, CMAKE4GDAL project. I have now been developing a build configuration on CMake that continues CMake4Gdal project https://github.com/miurahr/gdal/commits/compile_with_cmake
I do it because it seems to be a good chance to challenge again. There are a couple of reasons.
- Microsoft Visual Studio 2017 support CMake. https://blogs.msdn.microsoft.com/vcblog/2016/10/05/cmake-support-in-visual-studio/
- Jetbrains CLion also support only CMake. https://www.jetbrains.com/clion/ (This is my motivation)
- CMake support gcc, clang, mingw and VC++
- CMake support GNU Make(Linux), Ninja(VS/Windows), nmake(VC++), XCode(mac)
Other merits we will get after successfully migrating to CMake on all platforms
- Incremental compile and test that improve productivity
- Out-of-source compile that help Appvoyer / Travis CI tests speedy, developers can test it in multiple options.
- Single build configuration for all platforms.
Demerit
- There are not enough documentation for CMake.
- We are not fluent for CMake now.
So migrating to CMake should be considered carefully. I'd like to propose a step-by-step migration strategy.
- Develop CMake configuration on topic branch or github project.
- Merge CMake build configuration co-existence with GNU Make and VC configurations. (2.3 or 2.4) and add CI test on Travis / Appvoyer for cmake. Now it is a state of a technical preview. Still team will release binaries building with legacy build system. At this time, all contributor should aware that he/she should update both cmake and legacy one.
- Drop legacy build system when every core developers satisfy CMake/IDE experiences. (3.0 or 4.0)
Note:
See TracTickets
for help on using tickets.