C/C++の開発環境


Makefile

Make.defs

各種変数を定義するファイル

#------------------------------------------------------
# Makefile for C/C++ Program
# Author : Luu Tuan Anh
# Date   : 2012/9/6
# Version: 0.1
#------------------------------------------------------
# Make.defs
#   変数を定義するファイル
#   各種のライブラリのパスも定義する
#------------------------------------------------------
INCS     =   -I.
LIBS     =   -L. -L(パス)                      #ライブラリのパス
CC       =   clang++             #Cのコンパイラ:gcc or clang
CFLAGS   =   $(OPTIMIZE) $(INCS) #Cコンパイラのフラグ
LDFLAGS  =                       #リンカのフラグ
CXX      =   clang++             #C++のコンパイラ:g++かclang++
CXXFLAGS =   -g -O0 -Wall -fPIC  #C++コンパイラのフラグ
CPP      =                       #Cプリプロセッサ
CPPFLAGS =                       #Cプリプロセッサのフラグ
OPTIMIZE =   -02                 #gccの最適化オプション

Make.rules

実行ルールを定義するファイル

#------------------------------------------------------
# Makefile for C/C++ Program
# Author : Luu Tuan Anh  
# Date   : 2012/9/6
# Version: 0.1
#------------------------------------------------------
# Make.rules
#------------------------------------------------------

.SUFFIXES : .o .c .cc .cxx .cpp

.c.o :
        $(CXX)  $(SYSCFLAGS) $(XCFLAGS) $(CFLAGS) $(INCLUDES) -c $<
   
.cc.o :
        $(CXX) $(SYSCFLAGS) $(XCFLAGS) $(CFLAGS) $(INCLUDES) -c $<
   
.cxx.o :
        $(CXX) $(SYSCFLAGS) $(XCFLAGS) $(CFLAGS) $(INCLUDES) -c $<
   
# BUILDLIBRULE2 is used when one source file builds two .o's
# via differend #defines.

.c.a :
        $(CXX) $(SYSCFLAGS)  $(XCFLAGS) $(CFLAGS) $(INCLUDES) -c $<
        $(BUILDLIBRULE2)

.cc.a :
        $(CXX) $(SYSCFLAGS) $(XCFLAGS) $(CFLAGS) $(INCLUDES) -c $<
        $(BUILDLIBRULE2)

.cxx.a :
        $(CXX) $(SYSCFLAGS) $(XCFLAGS) $(CFLAGS) $(INCLUDES) -c $<
        $(BUILDLIBRULE2)

.o.a :
        $(BUILDLIBRULE2)

CCOM    = $(CC)  $(SYSCFLAGS) $(XCFLAGS) $(CFLAGS) $(INCLUDES) -c
CXXCOM  = $(CXX) $(SYSCFLAGS) $(XCFLAGS) $(CFLAGS) $(INCLUDES) -c
CLINK   = $(CC)  $(XCFLAGS)   $(CFLAGS)
CXXLINK = $(CXX) $(XCFLAGS)   $(CFLAGS)
MAKEDEPEND = $(MAKEDEPEND_PROD)/makedepend -- $(CFLAGS) \
      $(XCFLAGS) $(SYSCFLAGS) -- $(MAKEDEPFLAGS) -i/usr/include

ENDOFLIST=

IHAPI_INC  = $(TOP)/include
IHAPI_LIB  = $(TOP)/lib
IHAPI_PROD = $(TOP)/./prod
VPAPI_INC  = $(TOP)/../VPAPI/include
VPAPI_LIB  = $(TOP)/../VPAPI/lib
VPAPI_PROD = $(TOP)/../VPAPI/./prod
GLOBL_INC  = $(TOP)/../GLOBL/include
GLOBL_LIB  = $(TOP)/../GLOBL/lib
GLOBL_PROD = $(TOP)/../GLOBL/./prod

all: $(TARGETS)

run: $(TARGETS)
        ./$(TARGETS)

$(TARGETS): $(OBJS)

clean:
        -rm -f $(TARGETS) $(OBJS) .nfs* *~ \#* core


Makefile

各プロジェクトのMakefile。

Make.defsとMake.rulesをIncludeして、適当な情報のみ追加したらMakeできる。

#------------------------------------------------------
#Makefile for C++ Program
#Author : Luu Tuan Anh
#Date   : 2012/9/6
#------------------------------------------------------
#Makefile
include /(パス)/Make.defs
##################################################################
TOP       =    #パス
INCS      +=  -I#パス
LIBS      +=  -L#パス
CFLAGS    +=
TARGETS   = test
OBJS      = test.o

##################################################################
include /(パス)/Make.rules
Makefileを自分で作る方法と、プログラムに任せる方法もある。
参考
オープンソースを見たら、Makefile.amとMakefile.inをよくあったと思います。それは、Automakeの生成ファイルだ。
Automakeは大きな規模のプロジェクトによく利用するが、小さな規模のプロジェクトに対したら、Make.defsとMake.rulesを使うのは十分だと思う。
後、Vimを使ったら、マクロを作っておいた方が楽だと思います。

ライブラリを作る方法

参考


Comments