C ++ Primer: Source in the makefile simple summary
1. Background
C ++ Primer mainfile source are basically three kinds, and are mainfile MS_makefile_template, mainfile of chapters in the main directory, meaning mainfile now summarize each instruction.
2. Description
2.1 home directory mainfile
Home Directory mainfile follows, which is used to jump to each chapter subdirectories, and by nmake nmake clean nmake clobber three commands are implemented compile source code, delete .obj, deletion of the .obj and .exe . The specific implementation of each command implemented by mainfile subdirectories.
DIRS = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
all:
cd 1 && nmake -nologo
cd 2 && nmake -nologo
cd 3 && nmake -nologo
cd 4 && nmake -nologo
cd 5 && nmake -nologo
cd 6 && nmake -nologo
cd 7 && nmake -nologo
cd 8 && nmake -nologo
cd 9 && nmake -nologo
cd 10 && nmake -nologo
cd 11 && nmake -nologo
cd 12 && nmake -nologo
cd 13 && nmake -nologo
cd 14 && nmake -nologo
cd 15 && nmake -nologo
cd 16 && nmake -nologo
cd 17 && nmake -nologo
cd 18 && nmake -nologo
cd 19 && nmake -nologo
clean:
cd 1 && nmake -nologo clean
cd 2 && nmake -nologo clean
cd 3 && nmake -nologo clean
cd 4 && nmake -nologo clean
cd 5 && nmake -nologo clean
cd 6 && nmake -nologo clean
cd 7 && nmake -nologo clean
cd 8 && nmake -nologo clean
cd 9 && nmake -nologo clean
cd 10 && nmake -nologo clean
cd 11 && nmake -nologo clean
cd 12 && nmake -nologo clean
cd 13 && nmake -nologo clean
cd 14 && nmake -nologo clean
cd 15 && nmake -nologo clean
cd 16 && nmake -nologo clean
cd 17 && nmake -nologo clean
cd 18 && nmake -nologo clean
cd 19 && nmake -nologo clean
clobber:
cd 1 && nmake -nologo clobber
cd 2 && nmake -nologo clobber
cd 3 && nmake -nologo clobber
cd 4 && nmake -nologo clobber
cd 5 && nmake -nologo clobber
cd 6 && nmake -nologo clobber
cd 7 && nmake -nologo clobber
cd 8 && nmake -nologo clobber
cd 9 && nmake -nologo clobber
cd 10 && nmake -nologo clobber
cd 11 && nmake -nologo clobber
cd 12 && nmake -nologo clobber
cd 13 && nmake -nologo clobber
cd 14 && nmake -nologo clobber
cd 15 && nmake -nologo clobber
cd 16 && nmake -nologo clobber
cd 17 && nmake -nologo clobber
cd 18 && nmake -nologo clobber
cd 19 && nmake -nologo clobber
Tip: / nologo used to disable copyright notice.
2.2 subdirectory makefile
Subdirectory makefile actually cited MS_makefile_template home directory. It provides a subdirectory makefile nmake, and specific method nmake clean nmake clobber three kinds of commands.
Subdirectory mainfile content:
# executable files for this directory
OBJECTS = add.exe add_item.exe add_item2.exe avg_price.exe \
for_ex.exe forcount.exe item_io.exe main_only.exe \
mysum.exe occurs.exe whilecount.exe \
# tells make to use the file "..\MS_makefile_template", which
# defines general rules for making .obj and .exe files
include ..\MS_makefile_template
add_item.obj add_item2.obj avg_price.obj item_io.obj: Sales_item.h
Tip: "include ... \ MS_makefile_template" redistributes MS_makefile_template file on a directory.
Subdirectory contents of mainfile and MS_makefile_template integration (Notes has been removed):
// OBJECTS代表子目录需要生成的文件,其中"\"代表换行
OBJECTS = add.exe add_item.exe add_item2.exe avg_price.exe \
for_ex.exe forcount.exe item_io.exe main_only.exe \
mysum.exe occurs.exe whilecount.exe \
// CPP指定编译器,这里使用cl.exe
CPP = cl
// CPPFLAGS代表编译时所带的参数,"/EHsc"用于指定异常处理,"/nologo"用于禁止版权声明,"/I.."用于引用上级目录,即主目录。
CPPFLAGS = /EHsc /nologo /I.. $(LOCFLAGS)
// LOCFLAGS代表编译时额外需要添加的章节目录,方便引用文件夹中相关头文件。
LOCFLAGS =
// 默认生成OBJECTS所包含的.exe
all: $(OBJECTS)
// 第一行表示将源文件编译成目标文件,即.cpp编译.obj,
// 第二行代表编译命令,"CPP"代表编译器, "CPPFLAGS"代表编译参数,
// "/c"表示生成.obj,"$< "代表源文件,即.cpp。
.cpp.obj:
$(CPP) $(CPPFLAGS) /c $<
// 第一行表示将源文件编译成目标文件,即.obj编译成.exe
// 第二行代表代表编译命令,"CPP"代表编译器, "CPPFLAGS"代表编译参数,"$< "代表源文件,即.obj。
.obj.exe:
$(CPP) $(CPPFLAGS) $<
// 清除命令,主要删除*.obj
clean:
del *.obj core *.stackdump
// 清除所有命令,clobber依赖于clean,除了删除*.exe ,还需执行clean命令
clobber: clean
del *.exe
// 以":"分隔,表示前面文件的编译需要引用后面文件。
add_item.obj add_item2.obj avg_price.obj item_io.obj: Sales_item.h
3. Summary
- For multi-file compilation run, more efficient use makefile.