log.cpp
#include "log.h"
std::ofstream outstream("/home/kent/source/log/Data_Log.txt", std::ios::out);
log.h
#ifndef _LOG_H
#define _LOG_H
#include <iostream>
#include <fstream>
extern std::ofstream outstream;
#endif
main.cpp
#include <iostream>
#include "log.h"
void vprint(void)
{
outstream << __PRETTY_FUNCTION__ << "" << std::endl;
}
int main()
{
vprint();
return 0;
}
Makefile
# g++ -o 指定生成可执行文件的名称
# g++ -c 只编译不链接
test:main.o log.o
g++ -o test main.o log.o
#=============================================
#make会进行自动推导生成 main.o log.o 可以不需要写这一部分
main.o:main.cpp log.h
g++ -c main.cpp
log.o:log.cpp log.h
g++ -c log.cpp
#=============================================
#当然也可以一步到位 \ 是换行连接符 便于Makefile的易读,不用都挤在一行
test2:
g++ -o test2 main.cpp \
log.cpp
#=============================================
clean:
rm test main.o log.o
say:
echo "112232"
# 读取到第一个targer test,则test是终极目标
# 生成目标test ,test需要main.o T1.0
# 查找到存在目标main.o T1.o 先生成 最后生成test
#clean和say是标签,并不生成“clean”这个文件,这样的target称之为 “伪目标”
#伪目标的名字不能和文件名重复
#如: 当前目录下有一个文件/文件夹 名字为clean,运行make clean则会:
# make: `clean' is up to date.
#为了避免这种情况,可以使用一个特殊的标记“.PHONY”来显示地指明一个目标是“伪目标”
.PHONY: clean
clean:
rm test main.o log.o