切换主要用到ifeq ($(a),n)
即使用变量a的赋值不同作为判断条件
具体语法为
ifeq ($(条件变量),y)
#语句一
else
#语句二
endif
所以切换编译工具链可以通过改变CC的值即可,具体通用Make file文件如下:
ARCH:=arm
TESTINBOARD=n
ARCHITECTURE:=/home/xxx1/arm-linux-gnueabi-
ifeq ($(TESTINBOARD),y)
CROSS_COMPILE:= $(ARCHITECTURE)
else
CROSS_COMPILE:=
endif
#TARGET
TARGET = test
#SOURCES
SOURCES = test.cpp
#OBJECTS
OBJECTS = ${SOURCES:.cpp=.o}
CFLAGS := -g -Wall -O3 -Werror
#
CPPFLAGS += $(CFLAGS)
#env1的环境
ENV1_DIR=/home/xxx2/env1
#env2的环境
ENV2_DIR=/home/xxx3/env2
#EXTRA_CFLAGS
EXTRA_CFLAGS += -I$(ENV1_DIR)/include
EXTRA_CFLAGS += -I$(ENV2_DIR)/share/
ENV1_LIBDIR=$(ENV1_DIR)/lib
#LIBS
LDFLAGS += -L${ENV1_LIBDIR} -lsqlite3
#(-L+lib地址)
#(-l+lib库名)
LDFLAGS += -lpthread -lm
#CC = $(CROSS_COMPILE)g++
CC = $(CROSS_COMPILE)g++
$(TARGET):$(OBJECTS)
ifeq ($(TESTINBOARD),y)
$(CC) $(CPPFLAGS) -o $(TARGET) ${OBJECTS} $(LDFLAGS)
else
$(CC) $(CPPFLAGS) -o $(TARGET) ${OBJECTS}
endif
$(OBJECTS): $(SOURCES)
$(CC) $(CPPFLAGS) -o $@ -c $<
.PHONY:
clean
clean:
rm -f $(TARGET)
find ./ -name "*.o" |xargs rm -rf
对于通用文档编写来说以下几个点比较关键
1.源文件管理
#SOURCES
SOURCES = test.cpp
SOURCES += 源文件2.cpp
SOURCES += 源文件3.cpp
#OBJECTS
OBJECTS = ${SOURCES:.cpp=.o}
2.目标文件编译
$(TARGET):$(OBJECTS)
$(CC) $(CPPFLAGS) -o $(TARGET) ${OBJECTS} $(LDFLAGS)
3.源文件编译
$(OBJECTS): $(SOURCES)
$(CC) $(CPPFLAGS) -o $@ -c $<
或者
$(OBJECTS): $(SOURCES)
$(CC) $(CPPFLAGS) -o $@ -c $^
或者
$(OBJECTS): $(SOURCES)
$(CC) $(CPPFLAGS) -o $(OBJECTS) -c $(SOURCES)
三者区别待后续补充