C++ makefile 同时分离声明和实现
C++ makefile while seperate the declaration and implementation
我在 main.cpp 中用 C++ 编写了一个简单的 SQL 解释器
代码类似于
#include "lexer.h"
#include "parser.h"
#include "interpreter.h"
using namespace std;
int main(int argc, char* argv[]) {
//my code
}
在lexer.h、parser.h、interpretor.h中,各包含一个class同题头file.My题的声明和实现我应该如何编写我的 makefile 以便我可以将声明和实现分开,例如,在 lexer.h 中声明,在 lexer.cpp 中实现?
最简单的方法如下所示
interpreter: main.cc lexer.cc parser.cc interpreter.cc
g++ -o interpreter main.cc lexer.cc parser.cc interpreter.cc -I
但有时使用不同的目标很有用。 这是因为如果您修改项目中的单个文件,则不必重新编译所有内容,只需重新编译您修改的部分。所以您可以像下面那样做
使用依赖项
all: interpreter
interpreter: main.o lexer.o parser.o interpreter.o
g++ main.o lexer.o parser.o interpreter.o -o interpreter
main.o: main.cc
g++ -c main.cc
lexer.o: lexer.cc
g++ -c lexer.cc
parser.o: parser.cc
g++ -c parser.cc
interpreter.o: interpreter.cc
g++ -c interpreter.cc
clean:
rm -rf *o hello
使用变量和注释
我们在写Makefiles的时候也可以使用变量
# Implementing a new sql lexer the variable CC will be
# the compiler to use.
CC=g++
# these flags will be passed to the compiler.
CFLAGS=-c -Wall
all: interpreter
interpreter: main.o lexer.o parser.o interpreter.o
$(CC) main.o lexer.o parser.o interpreter.o -o interpreter
main.o: main.cc
$(CC) $(CFLAGS) main.cc
lexer.o: lexer.cc
$(CC) $(CFLAGS) lexer.cc
parser.o: parser.cc
$(CC) $(CFLAGS) parser.cc
interpreter.o: interpreter.cc
$(CC) $(CFLAGS) interpreter.cc
clean:
rm -rf *o hello
我在 main.cpp 中用 C++ 编写了一个简单的 SQL 解释器 代码类似于
#include "lexer.h"
#include "parser.h"
#include "interpreter.h"
using namespace std;
int main(int argc, char* argv[]) {
//my code
}
在lexer.h、parser.h、interpretor.h中,各包含一个class同题头file.My题的声明和实现我应该如何编写我的 makefile 以便我可以将声明和实现分开,例如,在 lexer.h 中声明,在 lexer.cpp 中实现?
最简单的方法如下所示
interpreter: main.cc lexer.cc parser.cc interpreter.cc
g++ -o interpreter main.cc lexer.cc parser.cc interpreter.cc -I
但有时使用不同的目标很有用。 这是因为如果您修改项目中的单个文件,则不必重新编译所有内容,只需重新编译您修改的部分。所以您可以像下面那样做
使用依赖项
all: interpreter
interpreter: main.o lexer.o parser.o interpreter.o
g++ main.o lexer.o parser.o interpreter.o -o interpreter
main.o: main.cc
g++ -c main.cc
lexer.o: lexer.cc
g++ -c lexer.cc
parser.o: parser.cc
g++ -c parser.cc
interpreter.o: interpreter.cc
g++ -c interpreter.cc
clean:
rm -rf *o hello
使用变量和注释 我们在写Makefiles的时候也可以使用变量
# Implementing a new sql lexer the variable CC will be
# the compiler to use.
CC=g++
# these flags will be passed to the compiler.
CFLAGS=-c -Wall
all: interpreter
interpreter: main.o lexer.o parser.o interpreter.o
$(CC) main.o lexer.o parser.o interpreter.o -o interpreter
main.o: main.cc
$(CC) $(CFLAGS) main.cc
lexer.o: lexer.cc
$(CC) $(CFLAGS) lexer.cc
parser.o: parser.cc
$(CC) $(CFLAGS) parser.cc
interpreter.o: interpreter.cc
$(CC) $(CFLAGS) interpreter.cc
clean:
rm -rf *o hello