C++バックグラウンド開発のmakefile作成


1つのプロジェクトのソースファイルはカウントされず、タイプ、機能、モジュール別にいくつかのディレクトリに配置され、プロジェクト全体をより効率的にコンパイルするにはmakefileとmakeコマンドツールが必要です.makefileでは、どのファイルが先にコンパイルされる必要があるか、どのファイルが後でコンパイルされる必要があるか、どのファイルが再コンパイルされる必要があるか、さらに複雑な機能操作を行う必要があるかを指定する一連のルールが定義されます.
makefileがもたらすメリットは「自動化コンパイル」であり、書き上げるとmakeコマンドが1つしか必要なく、エンジニアリング全体が完全に自動コンパイルされ、ソフトウェア開発の効率が大幅に向上します.makeコマンドはコマンドツールで、makefileのコマンドを解釈するコマンドツールです.一般的に、Delphiのmakeコマンド、Visual C++のnmakeコマンド、LinuxのGNUのmakeコマンドなど、多くのIDEにこのコマンドがあります.makefileによるコンパイルは,エンジニアリングにおいて一般的なコンパイル方法となっていることがわかる.
ファイルfile 1が3つあります.cpp,file2.cpp,file1.h makefileの作成方法:
//file1.cpp
#include "file1.h"
#include 

void print1()
{
    std::cout<<"Hello, I am in file1!
"
; }
//file1.h
#ifndef file1_H_
#define file1_H_

void print1(void);

#endif
//file2.cpp
#include "file1.h"

//void print1(void);

int main()
{
    print1();
    return 0;
}

makefileファイルは次のとおりです.
#makefile
test: file1.o file2.o
    g++ file1.o file2.o -o test

file2.o: file2.cpp file1.h
    g++ -c file2.cpp

file1.o: file1.cpp file1.h
    g++ -c file1.cpp
clean: 
    rm -f *.o test

大規模なエンジニアリングmakefileでは、私たちは慣れています.hファイルと.cppファイルは異なるフォルダに別々に配置され、マルチレベルのmakefileファイルも必要です.
lib_BCCencode:=./BCCencode/
lib_Process:=./Process/
lib_process_data:=./process_data/
lib_typeDef:=./typeDef/
lib_globalVarINIT:=./VarINIT/
libraries:=$(lib_BCCencode) $(lib_Process) $(lib_process_data)\
    $(lib_typeDef) $(lib_globalVarINIT)

CC:=gcc
MV:=-mv -u

.PHONY:all $(libraries)
all:$(libraries) Transmitter

$(libraries):
    $(MAKE) --directory=$@

vpath %.o libraries
Objects=mainbfBCC.o test.o $(lib_BCCencode)ccoding_byte.o $(lib_Process)bccInterleaverForSig.o\
        $(lib_Process)csdForHeLTF.o $(lib_Process)csdForPreamble.o $(lib_Process)generateBasicSig.o\
        $(lib_Process)generateHeLTF_csd.o $(lib_Process)generateLTF_csd.o\
        $(lib_Process)generatePreamble_csd.o $(lib_Process)generateSig_csd.o $(lib_Process)generateSTF_csd.o\
        $(lib_Process)MapForSig.o $(lib_Process)setSigInfo.o\
        $(lib_process_data)mcs_table_for_20M.o $(lib_process_data)process_data.o\
        $(lib_process_data)BCC_encoder.o $(lib_process_data)Data_CSD.o $(lib_process_data)GenDataAndScramble.o\
        $(lib_process_data)GenInit.o $(lib_process_data)modulate.o $(lib_process_data)PilotAdd_SubcarMap.o\
        $(lib_typeDef)commonStructure.o $(lib_globalVarINIT)globalVarINIT.o
Transmitter:$(Objects)
    $(CC) -g $(Objects) -lm -o $@
    $(MV)  $(lib_BCCencode)*.o $(lib_Process)*.o $(lib_process_data)*.o $(lib_typeDef)*.o\
        $(lib_globalVarINIT)*.o *.o ./objs

mainbfBCC.o:allHeaders.h
    $(CC) -c -g mainbfBCC.c -o $@
test.o:test.c
    $(CC) -c $< -o $@

.PHONY:clean
clean:
    #-rm *.o
    #-rm $(lib_BCCencode)*.o
    #-rm $(lib_Process)*.o
    #-rm $(lib_process_data)*.o
    #-rm $(lib_typeDef)*.o
    #-rm $(lib_globalVarINIT)*.o
    -rm ./objs/*.o
    -rm Transmitter
    -rm csd_*.txt
    -rm *_csd.txt

このファイルで注意すべき点はいくつかあります.
1.makefileの付与文で、$()操作を使用して付与コマンドを呼び出します.
lib_BCCencode:=./BCCencode/
lib_Process:=./Process/
lib_process_data:=./process_data/
lib_typeDef:=./typeDef/
lib_globalVarINIT:=./VarINIT/
libraries:=$(lib_BCCencode) $(lib_Process) $(lib_process_data)\
    $(lib_typeDef) $(lib_globalVarINIT)

CC:=gcc
MV:=-mv -u

2.PHONYコマンドとallコマンド
.PHONY:all $(libraries)#                  
all:$(libraries) Transmitter#       ,  all       

3.vpathコマンド
vpath %.o libraries

#         .o   , libraries     .o