//项目结构
.
.cpp
├── h1.h
├── h1.cpp
├── h2.h
├── h2.cpp
├── main └── makefile
#makefile
main: main.o h1.o h2.o
g++ main.o h1.o h2.o -o main
mian.o: main.cpp
g++ main.c -c -Wall -o main.o
h1.o: h1.h h1.cpp
g++ h1.cpp -c -Wall -o h1.o
h2.o: h1.h h1.cpp h2.cpp h2.h
g++ h2.cpp -c -Wall -o h2.o
clean:
rm *.o main -rf
#h1.cpp
#include "h1.h"
void h1()
{
using namespace std;
cout << "h1" << endl;
}
#h1.h
#pragma once
#include <iostream>
void h1();
#h2.h
#pragma once
#include <iostream>
void h2();
#h2.cpp
#include "h2.h"
#include "h1.h"
void h2()
{
using namespace std;
h1();
cout << "h2" << endl;
}
#main.cpp
#include <iostream>
#include "h2.h"
using namespace std;
int main(int agrc, char **argv)
{
h2();
cout << "main" << endl;
return 0;
}
make //构建
make clean //清楚中间文件
使用变量简化
OBJS=main.o h1.o h2.o
CC=g++
CFLAGS+=-c -Wall -g
main: $(OBJS)
$(CC) $(OBJS) -o main
mian.o: main.cpp
$(CC) main.c $(CFLAGS) -o main.o
h1.o: h1.h h1.cpp
$(CC) h1.cpp $(CFLAGS) -o h1.o
h2.o: h1.h h1.cpp h2.cpp h2.h
$(CC) h2.cpp $(CFLAGS) -o h2.o
clean:
$(RM) *.o main -r
#equal rm -f *.o main -r
run:
./main
再简化$^ $@
OBJS=main.o h1.o h2.o
CC=g++
CFLAGS+=-c -Wall -g
main: $(OBJS)
$(CC) $^ -o $@
#$^ 为:后面的内容
#$@ 为:前面的内容
mian.o: main.cpp
$(CC) $^ $(CFLAGS) -o $@
h1.o: h1.h h1.cpp
$(CC) h1.cpp $(CFLAGS) -o $@
h2.o: h1.h h1.cpp h2.cpp h2.h
$(CC) h2.cpp $(CFLAGS) -o $@
clean:
$(RM) *.o main -r
#equal rm -f *.o main -r
run:
./main
极致简化 使用通配符
OBJS=main.o h1.o h2.o
CC=g++
CFLAGS+=-c -Wall -g
main: $(OBJS)
$(CC) $^ -o $@
#S^ 为:后面的内容
mian.o: main.cpp
$(CC) $^ $(CFLAGS) -o $@
%.o: %.cpp
$(CC) $^ $(CFLAGS) -o $@
clean:
$(RM) *.o main -r
#equal rm -f *.o main -r
run:
./main
# runtime
g++ main.cpp -c -Wall -g -o main.o
g++ h1.cpp -c -Wall -g -o h1.o
g++ h2.cpp -c -Wall -g -o h2.o g++ main.o h1.o h2.o -o main
待续…