在Makefile中

通常所谓

CFLAGS 存储的是头文件 -I./include

LIBRARY存储的是库文件 -L./lib

LDFLAGS存储的是库文件 选用哪一个库文件看你自己的喜好

在Makefile 中看调试信息可以使用

$(info $(TARGETS))

第一版:

LOCAL_LIBRARY +=  -L./lib -lpal
#LIBRARY += -Wl,-rpath . -lpthread -ldl
LOCAL_LDFLAGS += -lopus -lpthread -ldl
LOCAL_CFLAGS += -I./include
SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c, %.o, $(SRCS))
#TARGETS = $(SRCS:%.c=%)
TARGETS = pal_sample opus_test libwebsockets_test cJson CFLAGS += $(LOCAL_CFLAGS)
LDFLAGS += $(LOCAL_LIBRARY) $(LOCAL_LDFLAGS) $(info $(OBJS))
$(info $(TARGETS)) #CC:=arm-openwrt-linux-gcc
#all : $(TARGETS)
all: opus_test
#$(TARGETS): %: %.o
# $(CC) -o $@ $< $(LOCAL_LDFLAGS) $(LIBRARY)
#pal_sample:pal_sample.o platform_linux.o
# $(CC) -o $@ platform_linux.o $(LIBRARY) pal_sample.o $(LOCAL_LDFLAGS) opus_test:opus_test.o platform_linux.o
$(CC) -o $@ platform_linux.o opus_test.o $(LDFLAGS)
opus_test.o:opus_test.c
$(CC) -o $@ $(CFLAGS) -c opus_test.c
#$(OBJS) : %.o: %.c
# $(CC) -c $(CFLAGS) $< -o $@ $(LOCAL_LDFLAGS) $(LIBRARY)
platform_linux.o:platform_linux.c
$(CC) -o $@ -c $(CFLAGS) platform_linux.c
clean :
@rm -rf $(TARGETS) $(OBJS) #.SUFFIXES:
.PHONY : all clean

第二版

LOCAL_LIBRARY +=  -L./lib -lpal
LOCAL_LDFLAGS += -lm -lopus -lwebsockets -lpthread -ldl
LOCAL_CFLAGS += -I./include TARGETS1 = air_opus
SRCS1 = opus_test.c platform_linux.c cJSON.c
OBJS1 = $(patsubst %.c, %.o, $(SRCS1)) CFLAGS += $(LOCAL_CFLAGS)
LDFLAGS += $(LOCAL_LIBRARY) $(LOCAL_LDFLAGS) $(info $(OBJS))
$(info $(TARGETS)) all: $(TARGETS1) $(TARGETS1):$(OBJS1)
$(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS) $(OBJS1): %.o:%.c
$(CC) -c $< -o $@ $(CFLAGS) clean :
@rm -rf $(TARGETS1) $(OBJS1) #.SUFFIXES:
.PHONY : all clean

为什么改成这一版本呢??

首先这样可以

\(^:所有的 .o
\)<:所有的依赖项目 .c 第一个的依赖,所以特别适合用来编译 .o文件

注意:

$(LDFLAGS) $(CFLAGS) 加入的位置,编译 .o 文件没必要加入库的路径.

编译 可执行文件的时候就比较适合了.

someone does not honour COPTS correctly, passed 0 times

这个表示你的编译命名覆盖了官方的命令.

比如使用了 := 之类的.

TIPS

SRCS1 = $(wildcard $(SRC)/*.cc)

可以使用这个方式将一个目录下的所有.cc参与进来

通用Makefile ---- openwrt的更多相关文章

  1. 一个简单的通用Makefile实现

    一个简单的通用Makefile实现   Makefile是Linux下程序开发的自动化编译工具,一个好的Makefile应该准确的识别编译目标与源文件的依赖关系,并且有着高效的编译效率,即每次重新ma ...

  2. 通用Makefile

    本文推荐了一个用于对 C/C++ 程序进行编译和连接以产生可执行程序的通用 Makefile. 在使用 Makefile 之前,只需对它进行一些简单的设置即可:而且一经设置,即使以后对源程序文件有所增 ...

  3. Makefile之写demo时的通用Makefile写法

    Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN  作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录M ...

  4. linux下通用Makefile写法

    linux编译多个源文件的程序比较麻烦,这下就需要通用的Makefile了,编译的时候执行一下make命令就OK,下面介绍通用makfile的写法. 假设现在有以下源文件:file1.h file1. ...

  5. 一个通用Makefile的编写

    作者:杨老师,华清远见嵌入式学院讲师. 我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件.如果我们用gcc去一个一个编译每一个源文件的 ...

  6. C/C++通用Makefile

    最近的项目又回到了Linux上运行,这就需要在Linux下编译项目,写Makefile针对习惯了Windows的程序员来说是一件痛苦的事,如果有一个通用的Makefile该多好啊,本着这样的目的,我再 ...

  7. 【linux】-Makefile简要知识+一个通用Makefile

    目录 Makefile Makefile规则与示例 为什么需要Makefile Makefile样式 先介绍Makefile的两个函数 完善Makefile 通用Makefile的使用 通用的Make ...

  8. 一个通用Makefile详解

    我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文 件. 如果我们用gcc去一个一个编译每一个源文件的话,效率会低很多,但是如果我们可以写 ...

  9. 4通用Makefile编写

    a.c #include<stdio.h> #include "a.h" int main() { printf("hello world\n"); ...

  10. Linux下C++的通用Makefile与解析

    本文给出万能Makefile的具体实现,以及对其中的关键点进行解析.所谓C++万能Makefile,即可编译链接所有的C++程序,而只需作很少的修改. 号称万能Makefile,一统江湖.我对原版的M ...

随机推荐

  1. python获取指定文件夹内文件名称

    比如下图,文件夹内有若干文件,且文件夹路径:C:\Users\Administrator\Desktop\2147\1024 4行代码,解决问题 import os path = "C:\\ ...

  2. layUI批量上传文件

    <div class="layui-form-item"> <label class="layui-form-label febs-form-item- ...

  3. eclipse界面混乱还原方法

    WindowPerspectiveReset Perspective

  4. [python] 轻量级定时任务调度库schedule使用指北

    schedule是一款专为简化定时任务调度而设计的Python库,它通过直观的语法降低了周期性任务的实现门槛.作为进程内调度器,它无需额外守护进程,轻量且无外部依赖,适合快速搭建自动化任务.不过,该库 ...

  5. SpringSecurity配置 1

    spring security整合步骤 过滤器链 SpringSecurity的本质就是一个过滤器链,内部包含了提供各种功能的过滤器,基本案例中的过滤器链如下图所示: UsernamePassword ...

  6. Linux grep 匹配多个关键字

      Linux grep 命令非常常用,经常用于匹配文本字符.基本语法如下: grep 'keyword'fileName.txt   如上所示,Linux grep 命令用于查找文件里符合指定条件的 ...

  7. 使用批处理脚本在win10系统启动Redis 5.0.10

      在<Spring Boot 整合Jedis连接Redis和简单使用>中,小编已经介绍了如何安装和启动Redis,但是,每次启动Redis 5.0.10 都是需要两个命令行窗口,执行启动 ...

  8. CF1983E I Love Balls

    Problem - E - Codeforces 爱丽丝和鲍勃玩摸球游戏.有 \(n\) 个球,其中 \(k\) 个是特殊球.每个球都有其价值. 他们轮流且不放回地摸球,每回合随机摸一个球并获得该球的 ...

  9. 阿里云数据库Inventory Hint技术分析

    秒杀场景是电商系统中最具挑战性的场景之一,其核心痛点在于超高并发请求(百万级甚至千万级QPS) 与 有限库存 之间的矛盾,以及由此引发的 系统崩溃.超卖.不公平 等问题.阿里通过一套精密的架构和算法组 ...

  10. 【C语言/C++】你知道线程安全代码到底是怎么编写的吗?

    相信有很多同学在面对多线程代码时都会望而生畏,认为多线程代码就像一头难以驯服的怪兽,你制服不了这头怪兽它就会反过来吞噬你. 夸张了哈,总之,多线程程序有时就像一潭淤泥,走不进去退不出来. 可这是为什么 ...