zoukankan      html  css  js  c++  java
  • 简单的makefile模板

    makefile不是总用到,每次用到的时候总要重新找资料,有点麻烦(怪自己基础知识不扎实,汗)。留一个通用模板放这,方便以后使用

    CC      = gcc
    CXX     = g++
    LINK    = g++
    CFLAGS  = -g -Wall -O2
    TARGET  = mk0
    SRCS    = $(wildcard *.cpp)
    SRCS    += $(wildcard *.c)
    
    CXX_OBJS    = $(patsubst %.cpp, %.o, $(wildcard *.cpp))
    C_OBJS  = $(patsubst %.c, %.o, $(wildcard *.c))
    
    all:$(TARGET)
    
    $(TARGET):$(CXX_OBJS) $(C_OBJS)
            $(LINK) $(CFLAGS) -o $@ $^
    %.o:%.cpp
            $(CXX) $(CFLAGS) -c -o $@ $<
    %.o:%.c
            $(CC) $(CFLAGS) -c -o $@ $<
    .PHONY:clean
    clean:
            rm -rf *.o $(TARGET) $(CXX_OBJS) $(C_OBJS)

    因为项目特殊性,经常c与cpp都会用到,所以简单写个这样的makefile文件

    上面makefile有很大局限性,比如只能使用与所有源文件在一个目录场景。下面展示可以多个目录下源文件,以及程序使用动态库的特殊场景

    CC      = gcc
    CXX     = g++
    LINKC    = gcc
    LINKCXX = g++ CFLAGS = -g -Wall -O2 TOP_DIR := $(shell pwd) SRC_DIRS := $(shell find $(TOP_DIR) -maxdepth 1 -type d) TARGET := $(TOP_DIR)/bin/mk0 INC_PATH = -I$(TOP_DIR)/include/ LIB_PATH = -L$(TOP_DIR)/lib/ EXT_LIB = -Wl,-rpath,$(TOP_DIR)/bin/ -lcsay CXX_SRCS = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.cpp)) CXX_OBJS = $(patsubst %.cpp, %.o, $(CXX_SRCS)) C_SRCS = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.c)) C_OBJS = $(patsubst %.c, %.o, $(C_SRCS)) all:$(TARGET) $(TARGET):$(CXX_OBJS) $(C_OBJS)
      $(shell if [ ! -d $(TOP_DIR)/bin ]; then mkdir $(TOP_DIR)/bin; fi)
    ifeq ($(CXX_SRCS),)
      $(LINKC) $(LIB_PATH) $(EXT_LIB) $(CFLAGS) -o $@ $^
    else
      $(LINKCXX) $(LIB_PATH) $(EXT_LIB) $(CFLAGS) -o $@ $^
    endif %.o:%.cpp
      $(CXX) $(INC_PATH) $(CFLAGS) -c -o $@ $< %.o:%.c
      $(CC) $(INC_PATH) $(CFLAGS) -c -o $@ $< .PHONY:clean clean: rm -rf $(TARGET) $(CXX_OBJS) $(C_OBJS)

    如上所示,代码包括了三个目录:. func0 func1目录。用到了一个动态库,因为不想把动态库放入/lib或者/usr/lib下,也不想修改LD_LIBRARY_PATH值。希望能像win下可执行文件跟dll在一起那样,所以使用了 -Wl,-rpath,$(TOP_DIR)/bin/ 指定程序运行时在当前目录下的bin目录找so库。这是一个特殊场景,不需要用到时删除 -Wl,-rpath,$(TOP_DIR)/bin/ 即可。

  • 相关阅读:
    bzoj 1053
    bzoj 1004 组合
    字符串哈希
    bzoj 1015 并查集
    bzoj 1003 最短路+dp
    HDU 4352 数位dp
    bzoj 1879 状压dp
    codeforces 55D 数位dp
    Codeforces 830B
    组合计数 && Stirling数
  • 原文地址:https://www.cnblogs.com/littlejohnny/p/3688702.html
Copyright © 2011-2022 走看看