量化交易之linux篇 - makefile - demo&注释

CC ?= gcc
AR ?= ar  # 用来创建和维护静态库文件, 可直接将需要增加的.o 文件简单的追加到静态库的末尾;
RANLIB ?= ranlib  # 更新静态库中的符号索引表;

CCFLAGS ?= -Wall -Wextra -Wshadow -Wconversion -std=c99 -pedantic -O2 -g

# wildcard: 用来 匹配文件
# OBJS=$(SRCS:%.c=%.o): 含义为将 SRCS中的所有.c文件替换为同名的.o文件, 并赋值给OBJS
SRCS=$(wildcard indicators/*.c)
SRCS+=$(wildcard utils/*.c)
OBJS=$(SRCS:%.c=%.o)
AMAL=$(SRCS:%.c=%.ca)

.SUFFIXES: .c .o .h .ca

all: libindicators.a sample example1 example2 fuzzer smoke smoke_amal benchmark cli

indicators.h: build.tcl templates/indicators.h templates/indicators.c templates/candles.h templates/candles.c

# 创建静态库的过程.
libindicators.a: indicators.h candles.h indicators.c candles.c $(OBJS)
    $(CC) -c $(CCFLAGS) indicators.c -o indicators.o
    $(CC) -c $(CCFLAGS) candles.c -o candles.o
    $(AR) rcu $@ $^ indicators.o candles.o
    $(RANLIB) $@

smoke: smoke.o libindicators.a
    $(CC) $(CCFLAGS) -o $@ $^ -lm
    ./$@

smoke_amal: smoke.o tiamalgamation.o
    $(CC) $(CCFLAGS) -o $@ $^ -lm
    ./$@

example1: example1.o libindicators.a
    $(CC) $(CCFLAGS) -o $@ $^ -lm

example2: example2.o libindicators.a
    $(CC) $(CCFLAGS) -o $@ $^ -lm

fuzzer: fuzzer.o libindicators.a
    $(CC) $(CCFLAGS) -o $@ $^ -lm

sample: sample.o libindicators.a
    $(CC) $(CCFLAGS) -o $@ $^ -lm

cli: cli.o libindicators.a
    $(CC) $(CCFLAGS) -o $@ $^ -lm

#Benchmark and further testing.
benchmark: benchmark.o libindicators.a
    $(CC) $(CCFLAGS) -o $@ $^ -lm

#Optional benchmark program. Requires TA-Lib.
benchmark_talib: benchmark.c libindicators.a
    $(CC) $(CCFLAGS) -o $@ $^ -DTA_LIB -lta_lib -lm

#This will build all of Tulip Indicators into one .c file.
#This is recommended to be used with other bindings for ease of build.
tiamalgamation.c: $(AMAL) indicators.ca indicators.h candles.ca candles.h

$(OBJS): indicators.h candles.h

smoke.o: indicators.h candles.h

example1.o: indicators.h

example2.o: indicators.h

fuzzer.o: indicators.h candles.h

sample.o: indicators.h candles.h

cli.o: indicators.h candles.h

benchmark.o: indicators.h candles.h

$(AMAL): indicators.h candles.h

.c.o:
    $(CC) -c $(CCFLAGS) $< -o $@

# -E: 同名的环境变量将覆盖目标指定的变量定义;
# -P: 输出Makefille被执行的过程信息;
# -D: 等价于在头文件中定义宏;
.c.ca:
    $(CC) -E -P $(CCFLAGS) $< -o $@ -D TI_SKIP_SYSTEM_HEADERS -D __TI_INDICATORS_H__ -D __TC_CANDLES_H__ -D __BUFFER_H__ -D __LOCALBUFFER_H__ -D __MINMAX_H__

clean:
    rm -f *.a
    rm -f *.exe
    rm -f *.o
    rm -f indicators/*.o
    rm -f utils/*.o
    rm -f *.ca
    rm -f indicators/*.ca
    rm -f utils/*.ca

veryclean:
    rm -f *.a
    rm -f *.exe
    rm -f *.o
    rm -f indicators/*.o
    rm -f utils/*.o
    rm -f *.ca
    rm -f indicators/*.ca
    rm -f utils/*.ca
    rm -f indicators.h
    rm -f indicators.c
    rm -f candles.h
    rm -f candles.c
    rm -f tiamalgamation.c
    rm -f -r docs
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值