一。了解linux下将编写的C/C++代码编译成可执行文件。
编译过程是分为四个阶段进行的,
即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。
场景:假设现在有三个文件:(1)a.cpp文件 (2)a.h文件 (3)main.cpp,包含main函数,这个文件使用到了a.h里声明,且在a.cpp里定义的内容。
版本1:
start:
g++ -o main.o -c main.cpp
g++ -o a.o -c a.cpp
g++ -o myapp a.o main.o
clean:
rm -rf main.o a.o
命令:
g++ -o main.o -c main.cpp
g++ -o a.o -c a.cpp 两行命令分别将main.cpp和a.cpp编译成main.o和a.o目标文件(也就是Compilation)
g++ -o myapp a.o main.o 将目标文件main.o和a.o 生成可执行文件myapp。
(只要参数中有-c,总是生成目标文件;只要参数中无-c而只有-o,则总是生成执行文件。)
使用:
直接输入make 就执行第一个命令下的语句(这里是start:下的那三行命令)
要执行其他命令,如clean,则输入make clean
版本2:
<span style="font-size:12px;">CC=g++
start:
$(CC) -o main.o -c main.cpp
$(CC) -o a.o -c a.cpp
$(CC) -o myapp a.o main.o
clean:
rm -rf main.o a.o</span>
这里在开始的位置新增了一个变量 CC=g++ ,再通过 $ 引用变量
版本3:
<span style="font-size:12px;">CC=g++
start:a.o main.o
$(CC) -o myapp a.o main.o
a.o:
$(CC) -o a.o -c a.cpp
main.o
$(CC) -o main.o -c main.cpp
clean:
rm -rf main.o a.o</span>
版本4:
<span style="font-size:12px;">CC=g++
start:a.o main.o
$(CC) -o myapp a.o main.o
.cpp.o:
$(CC) -o $@ -c $<
clean:
rm -rf main.o a.o</span>
版本5:
<span style="font-size:12px;">CC=g++
SRCS=main.cpp\ //如果是主函数
a.cpp
OBJS=main.o\
a.o
EXEC=myapp
start:$(OBJS)
$(CC) -o $(EXEC) $(OBJS)
.cpp.o:
$(CC) -o $@ -c $<
clean:
rm -rf $(OBJS)</span>