Skip to content

ericsonj/pymaketool

Repository files navigation

pymaketool

pymaketool is an elegant and simple tool to build and manager large C/C++ projects and libraries. The main purpose is to ease the build process of a project using Python for find and organize file sources.

Quick Start

Install required packages:

Ubuntu

$ sudo apt-get install -y gcc make python3 python3-pip python3-gi python3-gi-cairo gir1.2-gtk-3.0 git time zip

Fedora

$ sudo dnf install python3 python3-pip python3-gobject gtk3 time zip git gcc

Arch Linux

$ sudo pacman -S gcc make python python-pip python-gobject gtk3 time zip git 

Install pymaketool:

$ pip3 install pymaketool 

Create new basic C project.

$ pynewproject CLinuxGCC
  (author) Your name: Ericson
  (project_name) Your project name: hello

$ cd hello

hello$ make clean

hello$ make

hello$ ./Release/hello

Note: this example use EclipseAddon by default, pymaketool generate files .setting/language.settings.xml and .cproject.

Quick start in Docker

Pull imagen and run container:

$ docker pull ericsonjoseph/pymaketool

$ docker run -it ericsonjoseph/pymaketool

ubuntu@$ pynewproject CLinuxGCC

Quick Info

pymaketool process modules of code like objects. These objects ware define by files *_mk.py. With Python you can code how to discover and get source files and include paths, e.g.:

# File app_mk.py

from pymakelib import module

@module.ModuleClass
class App(module.AbstractModule):

    def getSrcs(self):
        # Get all sources .c in current folder ./app/
        # return [ 'app/app.c' ]
        return self.getAllSrcsC() 

    def getIncs(self):
        # Get all include paths in current folder ./app/
        # return [ 'app/app.c' ]
        return self.getAllIncsC()

The file app_mk.py could be more short and ease, e.g.:

# File app_mk.py

from pymakelib import module

# BasicCModule inherits from AbstractModule and implement getSrcs and getIncs.
@module.ModuleClass
class App(module.BasicCModule):
    pass

The file app_mk.py in raw style:

# File app_mk.py

from pymakelib import module

@module.ModuleClass
class App():
    
    def getSrcs(self):
        return [
            'app/app.c'
        ]

    def getIncs(self):
        return [
            'app'
        ]
    

Remote modules could be load like static libraries and with special compiler flags. e.g:

# File extlib_mk.py

from pymakelib import module

@module.ModuleClass
class ExtLib(module.ExternalModule):
    
    def init(self):
        # Compile modulelib like static library (Optional)
        return module.StaticLibrary("modulelib", "Release", rebuild=True)
     
    def getModulePath(self)->str:
        # Location of module
        return '/LIBS/module_lib/module_lib_mk.py'


    def getCompilerOpts(self):
        # Override method and set speacial compiler flags (Optional)
        opts = project.getCompilerOpts()
        opts['CONTROL-C-OPTS'] = ['-std=c99']
        return opts
    

For install guide go to install-guide

For more documentation go to Read the Docs

About

pymaketool is an elegant and simple tool to generate a C project with GNU Make files.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages