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の作成方法:
makefileファイルは次のとおりです.
大規模なエンジニアリングmakefileでは、私たちは慣れています.hファイルと.cppファイルは異なるフォルダに別々に配置され、マルチレベルのmakefileファイルも必要です.
このファイルで注意すべき点はいくつかあります.
1.makefileの付与文で、$()操作を使用して付与コマンドを呼び出します.
2.PHONYコマンドとallコマンド
3.vpathコマンド
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