def create
      unless project_can_build?
        disable_build
        return
      end

      # create build directory
      directory build_dir

      binary_targets = paths_of_local_libs() + @app_main_dep + @app_main_obj

      prj_libs = search_libs(settings)
      linked_libs = prj_libs[:all]

      # This is only necessary if we have more than a single app main file
      if @app_lib_objs.any?
        create_app_lib_rules(binary_targets, linked_libs)
      end

      file binary => binary_targets do
        tc.app(:libs => linked_libs,
              :app => binary,
              :objects => objs,
              :settings => @settings,
              :includes => src_dirs)
      end

      if test_objs.any?
        create_test_rules(binary_targets, linked_libs)
      end

      # link dependent library to lib target (e.g. libXXX.a => lib:XXX)
      # this makes a connection from the dependency in variable libs above to the appropriate rule as defined
      # inside the lib class. If one would know the absolute path to the library, one could alternatively draw
      # a dependency to the lib binary instead of the name, then these two rules wouldn't be necessary
      rule '.a' => [ proc {|tn| 'lib:' + File.basename(tn.name).gsub('lib', '').gsub('.a','') } ]
      rule '.so' => [ proc {|tn| 'lib:' + File.basename(tn.name).gsub('lib', '').gsub('.so','') } ]

      # create standard rules
      create_build_rules

      desc "Create #{name}"
      task name => binary_targets + [binary]

      #desc "Clean  #{name}"
      task name+'_clean' do
        tc.rm (objs + deps + [binary]).join(' ')
      end

      # add this application as dependency for the app:all task
      task :all => name

      # create runner
      task "#{name}_run" => name do
        tc.run binary
      end

      # add files for the clean rule
      CLEAN.include('*.o', build_dir)
      CLEAN.include(@app_lib, build_dir)
      CLEAN.include(binary, build_dir)
      CLOBBER.include('*.d', build_dir)
    end
def create
      unless project_can_build?
        disable_build
        return
      end

      # create build directory
      directory build_dir

      binary_targets = paths_of_local_libs() + @app_main_dep + @app_main_obj

      prj_libs = search_libs(settings)
      linked_libs = prj_libs[:all]

      # This is only necessary if we have more than a single app main file
      if @app_lib_objs.any?
        create_app_lib_rules(binary_targets, linked_libs)
      end

      file binary => binary_targets do
        tc.app(:libs => linked_libs,
              :app => binary,
              :objects => objs,
              :settings => @settings,
              :includes => src_dirs)
      end

      if test_objs.any?
        create_test_rules(binary_targets, linked_libs)
      end

      # link dependent library to lib target (e.g. libXXX.a => lib:XXX)
      # this makes a connection from the dependency in variable libs above to the appropriate rule as defined
      # inside the lib class. If one would know the absolute path to the library, one could alternatively draw
      # a dependency to the lib binary instead of the name, then these two rules wouldn't be necessary
      rule '.a' => [ proc {|tn| 'lib:' + File.basename(tn.name).gsub('lib', '').gsub('.a','') } ]
      rule '.so' => [ proc {|tn| 'lib:' + File.basename(tn.name).gsub('lib', '').gsub('.so','') } ]

      # create standard rules
      create_build_rules

      desc "Create #{name}"
      task name => binary_targets + [binary]

      #desc "Clean  #{name}"
      task name+'_clean' do
        tc.rm (objs + deps + [binary]).join(' ')
      end

      # add this application as dependency for the app:all task
      task :all => name

      # create runner
      task "#{name}_run" => name do
        tc.run binary
      end

      # add files for the clean rule
      CLEAN.include('*.o', build_dir)
      CLEAN.include(@app_lib, build_dir)
      CLEAN.include(binary, build_dir)
      CLOBBER.include('*.d', build_dir)
    end
The following parameters are expected in given hash params:

 @param  [String] name       Name of the application
 @param  [String] settings   Settings for application
 @param  [String] tool       Toolchain builder to use

 create all rules, tasks and dependencies
 for the app