Disclaimer: As a blogger I leverage the creative license to call solutions elegant, although in reality they may be far from it. Descriptive veracity is up to each reader.
"I'm mostly blogging this for my own future use, to be able to find how to do something I remember doing before. There you go, future me."
A friend and fellow blogger Denny Gentry reminded me of the value of helping out my future self by capturing a handy piece of code within a blog post.
Last week I had to back port a fairly complex project from Visual Studio 10 to Visual Studio 9. Microsoft likely has some tools laying around to achieve this, but I'm often tasked with rapidly moving our projects over to linux or other operating systems, and I decided to write a short script to solve the problem of cross platform project building once and for all.
All that's needed now are cmake, a ruby interpreter, and two lists of files. One list is for libraries (order matters, last dependency last) and another for executables. One caveat is that if the system you're ultimately moving too doesn't have cmake you may need to delete any project dependencies on CMakeLists.txt in the created project (I had to). By default cmake watches for changes to this file and remakes project files, which will lead to build errors without cmake's installation.
</a> create_cmake is a simple ruby script and sample lib which takes a list of libraries (with paths) and executables and generates a CMakeLists.txt file. The CMakeLists.txt file will generate build files on many platforms include linux, os x, and windows in the form of makefiles and visual studio solutions. See cmake.org for all supported build systems. library list: exec list: In this example to generate the CMakeLists.txt file first a lib.list and an exec.list are needed. See the included repo files for examples of formats (file lists where order matters, put your latest dependency last on the lib list). In the project directory run: Then from the project root type And cmake will determine a default build system for your architecture. You may specify targeted builds by typing: This yields a listing of supported platforms. Here's an example of what showed up on my home system: To create an Xcode project enter:
create_cmake.rb
The create_cmake.rb script
With sample inputs:
one_lib
another/lib
third_lib
test/test.cpp
ruby create_cmake.rb lib.list exec.list test > CMakeLists.txt
cd build
cmake ..
cmake
The following generators are available on this platform:
Unix Makefiles = Generates standard UNIX makefiles.
Xcode = Generate XCode project files.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
Eclipse CDT4 - Unix Makefiles = Generates Eclipse CDT 4.0 project files.
KDevelop3 = Generates KDevelop 3 project files.
KDevelop3 - Unix Makefiles = Generates KDevelop 3 project files.
cmake -G Xcode (path to CMakeLists.txt file)