[c++] Makefile is a good start.
以两个链接打开序幕,镇楼。
c++神之博客链表:那些C++牛人的博客
各个branch的学习指导:程序员技术练级攻略
A Simple Makefile Tutorial
Official menu: GNU make
Ref: 山寨内核Makefile之“天龙八部”
一个简单例子:
CC=gcc CFLAGS=-I. DEPS = hellomake.h OBJ = hellomake.o hellofunc.o %.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) hellomake: $(OBJ) $(CC) -o $@ $^ $(CFLAGS)
一个复杂例子:
IDIR=../include CC=gcc CFLAGS=-I$(IDIR) #指定了头文件 ODIR=obj LDIR=../lib LIBS=-lm _DEPS = hellomake.h DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) _OBJ = hellomake.o hellofunc.o OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) $(ODIR)/%.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) hellomake: $(OBJ) $(CC) -o $@ $^ $(CFLAGS) $(LIBS) .PHONY: clean clean: rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~
如果.cpp在不同的目录级别呢?也就是:多个文件目录下Makefile的写法
From: 多文件工程的编译-Makefile的简便写法
CC = gcc CFLAGS = -Isub -Iadd -O2 OBJS = add_int.o add_float.o sub_int.o sub_float.o main.o TARGET = cacu RM = rm -f $(TARGET):$(OBJS) $(CC) -o $(TARGET) $(OBJS) $(CFLAGS) $(OBJS):%.o:%.c $(CC) -c $(CFLAGS) $< -o $@ clean: -$(RM) $(TARGET) $(OBJS)
一个原始的"笨"写法:
#生成test,":"左边为目标,右边为依赖 。gcc后是命令 cacu:add_int.o add_float.o sub_int.o sub_float.o main.o gcc -o cacu add/add_int.o add/add_float.o \ (连接符) sub_int.o sub_float.o main.o #生成add_int.o的规则 add_int.o:add/add_int.c add/add_int.h gcc -c -o add/add_int.o add/add_int.c #生成add_float.o的规则 add_float.o:add/add_float.c add/add_float.h gcc -c -o add/add_float.o add/add_float.c #生成sub_int.o的规则 sub_int.o:sub/sub_int.c sub/sub_int.h gcc -c -o sub/sub_int.o sub/sub_int.c #生成sub_float.o的规则 sub_float.o:sub/sub_float.c sub/sub_float.h gcc -c -o sub/sub_float.o sub/sub_float.c #生成main.o的规则 main.o:main.c add/add.h sub/sub.h gcc -c-o main.o main.c -Iadd -Isub #清理的规则 clean: rm -f test add_int.o add_float.o sub_int.o \ sub_float.o main.o
如果要写wraper,注意extern c,需要注释掉。
否则导致函数名因为重载机制而链接出问题。