简介:
通用——只需把一些变量设置好就能使用。
分类:
1. 通用的c项目
2. 通用的c++项目
3. 通用的静态库c项目
4. 通用的动态库c项目
建议的目录结构:
project
bin
include
src
tests
复杂一点的:
project
docs
bin
include
src
lib
modules
1. 通用的c项目
TARGET =
PREFIX_BIN =
CC = gcc
INCLUDES =
LIBS =
CFLAGS =-Wall -Werror
LINKFLAGS =
C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))
.c.o:
$(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c
compile: $(C_OBJS)
$(CC) $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)
clean:
rm -f $(C_OBJS)
rm -f $(TARGET)
install: $(TARGET)
cp $(TARGET) $(PREFIX_BIN)
uninstall:
rm -f $(PREFIX_BIN)/$(TARGET)
rebuild: clean compile
2. 通用的c++项目
TARGET =
PREFIX_BIN =
CC = gcc
CXX = g++
INCLUDES =
LIBS =
CFLAGS = -Wall -Werror
LINKFLAGS =
C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))
CPP_SOURCES = $(wildcard *.cpp)
CPP_OBJS = $(patsubst %.cpp, %.o, $(CPP_SOURCES))
.c.o:
$(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c
.cpp.o:
$(CXX) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.cpp
compile: $(CPP_OBJS) $(C_OBJS)
$(CXX) $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)
clean:
rm -f $(CPP_OBJS) $(C_OBJS)
rm -f $(TARGET)
install: $(TARGET)
cp $(TARGET) $(PREFIX_BIN)
uninstall:
rm -f $(PREFIX)/$(PREFIX_BIN)
rebuild: clean compile
3. 通用的静态库c项目
TARGET = libmain.a
PREFIX = /usr/lib
CC = gcc
INCLUDES =
LIBS =
CFLAGS =
C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))
.c.o:
$(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c
$(TARGET): $(C_OBJS)
rm -f $@
ar cr $@ $(C_OBJS)
ranlib $@
clean:
rm -f $(C_OBJS)
rm -f $(TARGET)
install: $(TARGET)
cp $(TARGET) $(PREFIX)
uninstall:
rm -f $(PREFIX)/$(TARGET)
rebuild: clean $(TARGET)
4. 通用的动态库c项目
TARGET =
PREFIX_LIB = /usr/lib
PREFIX_INCLUDE = /usr/local/include
INSTALL_HEADERS =
CC = gcc
INCLUDES =
LIBS =
CFLAGS =-O3 -fPIC -Wall -Werror
LINKFLAGS = -shared
C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))
.c.o:
$(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c
compile: $(C_OBJS)
$(CC) $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)
clean:
rm -f $(C_OBJS)
rm -f $(TARGET)
install: $(TARGET)
cp $(TARGET) $(PREFIX_LIB)
cp $(INSTALL_HEADERS) $(PREFIX_INCLUDE)
uninstall:
rm -f $(PREFIX_LIB)/$(TARGET)
cd $(PREFIX_INCLUDE); rm -f $(INSTALL_HEADERS)
rebuild: clean compile
通用——只需把一些变量设置好就能使用。
分类:
1. 通用的c项目
2. 通用的c++项目
3. 通用的静态库c项目
4. 通用的动态库c项目
建议的目录结构:
project
bin
include
src
tests
复杂一点的:
project
docs
bin
include
src
lib
modules
1. 通用的c项目
TARGET =
PREFIX_BIN =
CC = gcc
INCLUDES =
LIBS =
CFLAGS =-Wall -Werror
LINKFLAGS =
C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))
.c.o:
$(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c
compile: $(C_OBJS)
$(CC) $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)
clean:
rm -f $(C_OBJS)
rm -f $(TARGET)
install: $(TARGET)
cp $(TARGET) $(PREFIX_BIN)
uninstall:
rm -f $(PREFIX_BIN)/$(TARGET)
rebuild: clean compile
2. 通用的c++项目
TARGET =
PREFIX_BIN =
CC = gcc
CXX = g++
INCLUDES =
LIBS =
CFLAGS = -Wall -Werror
LINKFLAGS =
C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))
CPP_SOURCES = $(wildcard *.cpp)
CPP_OBJS = $(patsubst %.cpp, %.o, $(CPP_SOURCES))
.c.o:
$(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c
.cpp.o:
$(CXX) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.cpp
compile: $(CPP_OBJS) $(C_OBJS)
$(CXX) $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)
clean:
rm -f $(CPP_OBJS) $(C_OBJS)
rm -f $(TARGET)
install: $(TARGET)
cp $(TARGET) $(PREFIX_BIN)
uninstall:
rm -f $(PREFIX)/$(PREFIX_BIN)
rebuild: clean compile
3. 通用的静态库c项目
TARGET = libmain.a
PREFIX = /usr/lib
CC = gcc
INCLUDES =
LIBS =
CFLAGS =
C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))
.c.o:
$(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c
$(TARGET): $(C_OBJS)
rm -f $@
ar cr $@ $(C_OBJS)
ranlib $@
clean:
rm -f $(C_OBJS)
rm -f $(TARGET)
install: $(TARGET)
cp $(TARGET) $(PREFIX)
uninstall:
rm -f $(PREFIX)/$(TARGET)
rebuild: clean $(TARGET)
4. 通用的动态库c项目
TARGET =
PREFIX_LIB = /usr/lib
PREFIX_INCLUDE = /usr/local/include
INSTALL_HEADERS =
CC = gcc
INCLUDES =
LIBS =
CFLAGS =-O3 -fPIC -Wall -Werror
LINKFLAGS = -shared
C_SOURCES = $(wildcard *.c)
C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))
.c.o:
$(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c
compile: $(C_OBJS)
$(CC) $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)
clean:
rm -f $(C_OBJS)
rm -f $(TARGET)
install: $(TARGET)
cp $(TARGET) $(PREFIX_LIB)
cp $(INSTALL_HEADERS) $(PREFIX_INCLUDE)
uninstall:
rm -f $(PREFIX_LIB)/$(TARGET)
cd $(PREFIX_INCLUDE); rm -f $(INSTALL_HEADERS)
rebuild: clean compile