linux 中的 c++代码有时候会带有make文件
需要带有make文件的话是这样的。
file->new ->c++ project 然后选择最后一个make file project中的hello world C++ Makefile Project
然后就会生成
Makefile
CXXFLAGS = -O2 -g -Wall -fmessage-length=0
OBJS = projectName.o
LIBS =
TARGET = projectName
$(TARGET): $(OBJS)
$(CXX) -o $(TARGET) $(OBJS) $(LIBS)
all: $(TARGET)
clean:
rm -f $(OBJS) $(TARGET)Makefile文件有一个all:就是build的开头,clean就是要清理时候执行的。
自制的make如下
TARGET = crowbar
CC=gcc
OBJS = \
lex.yy.o\
y.tab.o\
main.o\
interface.o\
create.o\
execute.o\
eval.o\
string.o\
string_pool.o\
util.o\
native.o\
error.o\
error_message.o\
./memory/mem.o\
./debug/dbg.o
CFLAGS = -c -g -Wall -Wswitch-enum -ansi -pedantic -DDEBUG
INCLUDES = \
$(TARGET):$(OBJS)
cd ./memory; $(MAKE);
cd ./debug; $(MAKE);
$(CC) $(OBJS) -o $@ -lm
clean:
rm -f *.o lex.yy.c y.tab.c y.tab.h *~
y.tab.h : crowbar.y
bison --yacc -dv crowbar.y
y.tab.c : crowbar.y
bison --yacc -dv crowbar.y
lex.yy.c : crowbar.l crowbar.y y.tab.h
flex crowbar.l
y.tab.o: y.tab.c crowbar.h MEM.h
$(CC) -c -g $*.c $(INCLUDES)
lex.yy.o: lex.yy.c crowbar.h MEM.h
$(CC) -c -g $*.c $(INCLUDES)
.c.o:
$(CC) $(CFLAGS) $*.c $(INCLUDES)
./memory/mem.o:
cd ./memory; $(MAKE);
./debug/dbg.o:
cd ./debug; $(MAKE);
############################################################
create.o: create.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
error.o: error.c MEM.h crowbar.h CRB.h CRB_dev.h
error_message.o: error_message.c crowbar.h MEM.h CRB.h CRB_dev.h
eval.o: eval.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
execute.o: execute.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
interface.o: interface.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
main.o: main.c CRB.h MEM.h
native.o: native.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
string.o: string.c MEM.h crowbar.h CRB.h CRB_dev.h
string_pool.o: string_pool.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
util.o: util.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h因为这里没有 all标签,所以一直报错:
23:05:22 **** Build of configuration Default for project cc ****
make all
make: *** No rule to make target `all'. Stop.
23:05:22 Build Finished (took 85ms)加上all后就ok了,加上ok的代码如下:
TARGET = crowbar
CC=gcc
OBJS = \
lex.yy.o\
y.tab.o\
main.o\
interface.o\
create.o\
execute.o\
eval.o\
string.o\
string_pool.o\
util.o\
native.o\
error.o\
error_message.o\
./memory/mem.o\
./debug/dbg.o
CFLAGS = -c -g -Wall -Wswitch-enum -ansi -pedantic -DDEBUG
INCLUDES = \
$(TARGET):$(OBJS)
cd ./memory; $(MAKE);
cd ./debug; $(MAKE);
$(CC) $(OBJS) -o $@ -lm
all: $(TARGET)
clean:
rm -f *.o lex.yy.c y.tab.c y.tab.h *~
y.tab.h : crowbar.y
bison --yacc -dv crowbar.y
y.tab.c : crowbar.y
bison --yacc -dv crowbar.y
lex.yy.c : crowbar.l crowbar.y y.tab.h
flex crowbar.l
y.tab.o: y.tab.c crowbar.h MEM.h
$(CC) -c -g $*.c $(INCLUDES)
lex.yy.o: lex.yy.c crowbar.h MEM.h
$(CC) -c -g $*.c $(INCLUDES)
.c.o:
$(CC) $(CFLAGS) $*.c $(INCLUDES)
./memory/mem.o:
cd ./memory; $(MAKE);
./debug/dbg.o:
cd ./debug; $(MAKE);
############################################################
create.o: create.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
error.o: error.c MEM.h crowbar.h CRB.h CRB_dev.h
error_message.o: error_message.c crowbar.h MEM.h CRB.h CRB_dev.h
eval.o: eval.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
execute.o: execute.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
interface.o: interface.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
main.o: main.c CRB.h MEM.h
native.o: native.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
string.o: string.c MEM.h crowbar.h CRB.h CRB_dev.h
string_pool.o: string_pool.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
util.o: util.c MEM.h DBG.h crowbar.h CRB.h CRB_dev.h
只是加了一行: all: $(TARGET)
运行:
把下面这个文件放在test文件夹下
t.crb
for (i = 1; i < 100; i = i + 1) {
if (i % 15 == 0) {
print("FizzBuzz\n");
} elsif (i % 3 == 0) {
print("Fizz\n");
} elsif (i % 5 == 0) {
print("Buzz\n");
} else {
print("" + i + "\n");
}
}
debug as configure 在参数加上 : test/t.crb
so 。
本文详细介绍了一个复杂的Makefile配置示例,包括如何定义目标、依赖项和编译规则等。通过解决缺少'all'标签的问题,展示了Makefile在项目构建中的关键作用。
2863

被折叠的 条评论
为什么被折叠?



