0.02
No commit activity in last 3 years
No release in over 3 years
Provides Rake:Builder, a specific rake TaskLib for building C, C++, Objective-C and Objective-C++ projects
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 3.3.0

Runtime

>= 0
>= 0
 Project Readme

Build Status

rake-builder

Rake for C, C++, Objective-C and Objective-C++ Projects

Hello World! Example

(See the 'examples' directory for source).

Rakefile:

require 'rubygems' if RUBY_VERSION < '1.9'
require 'rake/builder'

Rake::Builder.new do |builder|
  builder.target = 'hello_world_cpp'
end

main.cpp

#include <iostream>

int main(int argc, char *argv[]) {
  std::cout << "Hello World!\n";

  return 0;
}

The Hello World! project should build and run:

$ rake run
Hello World!

Installation

Dependencies

  • makedepend
  • linux: package 'xutils-dev'
  • OS X: already installed

Gem

$ (sudo) gem install rake-builder

Usage

Examples

See the 'examples' directory.

If you've installed the gem system-wide, type the following to go to the correct directory:

$ cd `gem environment gemdir`/gems/rake-builder-nnn
$ cd examples

Project Configuration

In order to build on a specific computer, you will need to indicate information like non-standard include paths.

Rake::Builder collects all such information in one file: '.rake-builder'

This file should be created in the same directory as the Rakefile.

The file should be a YAML structure, and must include a version.

Currently, the following can be configured:

  • extra include paths: :include_paths
  • extra compilation options (e.g. defines): :compilation_options

Example '.rake-builder'

---
:rake_builder:
  :config_file:
    :version: "1.0"
:include_paths:
- /opt/local/include
- /usr/include/c++/4.2.1

Default Tasks

  • compile
  • build
  • run - executables only
  • install
  • clean

Installing Headers

If you install a static library, your headers will also be installed. Ensure that you use file globs, e.g. './include/**/*.h', as these will ensure that your headers are installed in the correct subdirectories.

Problem Resolution

If you project does not build, use Rake's --trace option to get more information about what's going wrong:

$ rake --trace

Project

Status

  • Builds C, C++ and Objective-C projects using GCC.

Dependency Resolution

Task dependencies must ensure that out of date files are recreated as needed.

rake-builder Dependency Resolution

Limitations

File Modification Times

Rake's FileTask decides whether a file needs rebuilding by comparing on disk file modification times (see the private method out_of_date?, which returns true if the dependency was modified after the dependent). Unfortunately, most modern file systems hold modification times in whole seconds. If a dependency and a dependent were modificed during the same second, even if the dependency were modified later, out_of_date? returns false which is not the correct answer.

This problem is mostly felt in testing, where file modification times are temporarily modified to test dependencies. Also, tests wait for second to complete after building.

File Modification Time Resolutions

Source Files with the Same Name

Currently, object files from all source files are placed in the same directory. So, if there are two source files with the same name, they will overwrite each other.

Alternatives