欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

模块化工程构建工具 - XBuild 博客分类: OpenSource xbuildMakeGNUMake 

程序员文章站 2024-03-19 12:25:46
...
Xbuild is project auto build tool, it's just a simple wrapper of GNUMake. The home page is https://sourceforge.net/projects/xbuild/


1.How to install
----------------
tar -xzvf xbuild-<version>.tar.gz -C /usr/local/sbin

2.Syntax specificatio of build.mk file
--------------------------------------

- Overview
  An build.mk file is written to describe your sources to the build system. More
  specifically:

  o The file is really a tiny GNU Makefile fragment that will be parsed one or
    more times by the build system. As such, you should try to minimize the
    variables you declare there and do not assume that anything is not defined
    during parsing.

  o The file syntax is designed to allow you to group your sources into
    'modules'. A module is one of the following:

    * a static library
    * a shared library
    * a executable

    You can define one or more modules in each build.mk file, and you can use
    the same source file in several modules.

  o The build system handles many details for you. For example, you don't need
    to list header files or explicit dependencies between generated files in
    your build.mk. The build system will compute these automatically for you.

    This also means that, when updating to newer releases of the XBuild, you
    should be able to benefit from new toolchain/platform support without having
    to touch your build.mk files.

- Simple example:
  Before describing the syntax in details, let's consider the simple "hello"
  example, assume the structure of "hello" project is following:
 
    hello
    ├─include
    │ └─hello.h
    ├─src
    │ ├─build.mk
    │ └─hello.c
    └─build.mk

  Here, we can see:
 
  o The 'src' directory containing the c source for the sample project.
  o The 'include' directory containing the c header file for the sample project.
  o The 'hello/build.mk' file that describles the sub diretory to build system.
    Its content is:

    ---------- cut here ----------
    include $(all-subdir-makefiles)
    ---------- cut here ----------
  o The 'src/build.mk' file that describles the shared library to build system.
    Its content is:
   
    ---------- cut here ----------
    $(call prepare-build)
   
    MODULE      := hello
    INCLUDES    := ../include
    CFLAGS      := -O3 -Wall -ggdb -D_DEBUG
    CPPFLAGS    :=
    CXXFLAGS    := $(CPPFLAGS)
    LDFLAGS     := -L/usr/local/lib -L/usr/lib
    LDLIBS      :=
    SHARED_LIBS :=
    STATIC_LIBS :=
    SOURCES     := hello.c
   
    $(call build-shared-library)
    ---------- cut here ----------

- Xbuild provided evironment variables

  o ARCH
    The architecture of the CPU

  o XBUILD_PROJECT
    The absolute path of project

- Xbuild provided variables

  o MODULE
    This variable is required, it's describled the module name.

  o INCLUDES
    A set of C/C++ header file include directory, for example:

      INCLUDES := ../include
      INCLUDES += ../../include

  o CFLAGS
    A set of compile flags for .c source file, for example:

      CFLAGS := -O3 -Wall -ggdb -D_DEBUG

  o CPPFLAGS
    A set of compile flags for .cpp source file, for example:

      CPPFLAGS := -O3 -Wall -ggdb -D_DEBUG -std=gnu++0x

  o CXXFLAGS
    A set of compile flags for .cxx and .cc source file, for example:

      CXXFLAGS := -O3 -Wall -ggdb -D_DEBUG -std++   

  o LDFLAGS
    A set of link flags for build shared library, static library orcutable,
    for example:

      LDFLAGS := -L/usr/local/lib -L/usr/lib -L$(call pwd)/../lib

    NOTE: If the path is relative, should use the function $(call pwd) to locate
    current directory. 

  o LDLIBS
    A set of external library to link, for example:

      LDLIBS := -lrt -lpthr

  o SHARED_LIBS
    A set of shared library module name that dependencied by current module,
    for example:

    SHARED_LIBS := module-foo module-bar

    If the SHARED_LIBS is defined, the module linked after all of dependency
    module linked success.

  o STATIC_LIBS
    A set of static library module name that dependencied by current module,
    it's the same of SHARED_LIBS.

  o SOURCES
    A set of source file to compile.

- Xbuild provided functions & macros

  o add-suffix
  o build-shared-library
  o build-static-library
  o build-executable
  o pwd
  o all-subdir-makefiles
 
  About the details, please see '$Xbuild/core/definitions.mk'

4.Build project
---------------
Usage of xbuild command:

  cd <project-directory>
  xbuild all

  or

  xbuild r[ebuild]