为了记忆,总结一下,以便查询。
linux Makefile模板:
1、编译动态库
- #############################################################
- # Makefile for shared library.
- # 编译动态链接库
- #############################################################
- #set your own environment option
- CC = g++
- CC_FLAG = -D_NOMNG -D_FILELINE
- #set your inc and lib
- INC =
- LIB = -lpthread -L./ -lsvrtool
- #make target lib and relevant obj
- PRG = libsvrtool.so
- OBJ = Log.o
- #all target
- all:$(PRG)
- $(PRG):$(OBJ)
- $(CC) -shared -o $@ $(OBJ) $(LIB)
- .SUFFIXES: .c .o .cpp
- .cpp.o:
- $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
- .PRONY:clean
- clean:
- @echo "Removing linked and compiled files......;
- rm -f $(OBJ) $(PRG)
2、编译静态库
- #############################################################
- # Makefile for static library.
- # 编译静态链接库
- #############################################################
- #set your own environment option
- CC = g++
- CC_FLAG = -D_NOMNG -D_FILELINE
- #static library use 'ar' command
- AR = ar
- #set your inc and lib
- INC =
- LIB = -lpthread -L./ -lsvrtool
- #make target lib and relevant obj
- PRG = libsvrtool.a
- OBJ = Log.o
- #all target
- all:$(PRG)
- $(PRG):$(OBJ)
- ${AR} rv ${PRG} $?
- .SUFFIXES: .c .o .cpp
- .cpp.o:
- $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
- .PRONY:clean
- clean:
- @echo "Removing linked and compiled files......"
- rm -f $(OBJ) $(PRG)
3、可执行程序
- ###########################################
- #Makefile for simple programs
- ###########################################
- INC=
- LIB= -lpthread
- CC=CC
- CC_FLAG=-Wall
- PRG=threadpooltest
- OBJ=CThreadManage.o CThreadPool.o CThread.o CWorkerThread.o threadpooltest.o
- $(PRG):$(OBJ)
- $(CC) $(INC) $(LIB) -o $@ $(OBJ)
- .SUFFIXES: .c .o .cpp
- .cpp.o:
- $(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
- .PRONY:clean
- clean:
- @echo "Removing linked and compiled files......"
- rm -f $(OBJ) $(PRG)
随机组合、举一反三即可写出适合项目的makefile。
===================================== 我是可爱的分割线 =====================================
Android Makefile模板:
在一个Android.mk中也可以生成多个可执行程序、动态库或者静态库,需要将源程序文件和它的Android.mk文件放在同一个文件夹下面,如下:
可执行程序的Android.mk:
# Test Exe
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
main.c
LOCAL_MODULE:= test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_EXECUTABLE)
静态库(归档文件)的Android.mk:
# Test Static lib
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_STATIC_LIBRARY)
动态库(共享库)的Android.mk:
# Test shared lib
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_shared
TARGET_PRELINK_MODULE := false
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)
编译通过后生成的目标文件夹分别位于以下的文件夹路径下:
可执行文件:out/target/product/generic/obj/EXECUTABLE
静态库:out/target/product/generic/obj/STATIC_LIBRARY
共享库:out/target/product/generic/obj/SHARED_LIBRARY
目标的模板:可执行程序,动态库,静态库
include $(BUILD_EXECUTABLE)
include $(BUILD_SHARED_LIBRARY)
include $(BUILD_STATIC_LIBRARY)
如果编译主机的:可执行程序,动态库,静态库
include $(BUILD_HOST_EXECUTABLE)
include $(BUILD_HOST_SHARED_LIBRARY)
include $(BUILD_HOST_STATIC_LIBRARY)
========================================== over all ================================================