做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk

前言:”懒”在这里当然不是贬义词,而是追求高效,拒绝重复劳动的代名词!做一个懒COCOS2D-X程序猿的系列文章将教会大家在工作中如何偷懒,文章篇幅大多较短,有的甚至只是几行代码,争取把懒发挥到极致!

一.懒人说书


Android.mk中LOCAL_SRC_FILES需要罗列出所有参与编译的文件,这样在.cpp文件少的时候还可以一个一个添加,当有几百个文件的时候会十分的痛苦!

我们下看看TestCpp工程中的Android.mk文件:

这只是节选的一部分,大概只有50个左右吧,除数量多之外让我们看看下面的情况:

1改变了其中一个文件名就得修改mk文件,痛苦之处显而易见,而且会重新编译整个工程!

2.手工添加时因为失误多了空格,少了\之类事情很常见,得重新编译后才能发现问题!

二.进击的懒人


是不是不能忍受了!让我们试着改变下吧!

1.写个脚本自动变量里Classes文件夹下的所有.cpp文件,生成和上面类似的Android.mk文件.这个比手动添加要方便好多,但还是没有从根本上解决问题!

2.有木有办法在Android.mk中做手脚,不用罗列所有的.cpp文件呢?直到我看到了这篇文章:

http://blog.csdn.net/qq634416025/article/details/8904466

C++





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

LOCAL_PATH:=$(call my-dir)

include$(CLEAR_VARS)

LOCAL_MODULE:=hellocpp_shared

LOCAL_MODULE_FILENAME:=libhellocpp

FILE_LIST:=hellocpp/main.cpp

FILE_LIST+=$(wildcard$(LOCAL_PATH)/../../Classes/*.cpp)

LOCAL_SRC_FILES:=$(FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_C_INCLUDES:=$(LOCAL_PATH)/../../Classes

LOCAL_WHOLE_STATIC_LIBRARIES:=cocos2dx_static

include$(BUILD_SHARED_LIBRARY)

$(call
import-module,cocos2dx)

这样就OK了,不用手打所有的.cpp文件了!

但这这个做法还是有缺陷,就是如果Classes有子文件夹的话还是得在添加上去的,如下:

C++





1

2

3

#FILE_LIST
+= $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)

#FILE_LIST += $(wildcard
$(LOCAL_PATH)/../../Classes/datapacker/*.cpp)

#FILE_LIST
+= $(wildcard $(LOCAL_PATH)/../../Classes/platform/*.cpp)

这个样子的写法已经很高端了,有新的子文件的时候添加下就好,但是对于懒到极致的人还是不能接受!

3.终极解决方案

上边的解决方案用到了wildcard这个关键子,虽然不明白这是神马东西,但肯定可这个有关!于是经过一番google之后,便有了下面的这个:

C++





1

2

3

4

5

6

7

8

9

10

11

12

13

14

#
遍历目录及子目录的函数

define walk

$(wildcard$(1))$(foreache,$(wildcard$(1)/*),$(call walk,$(e)))

endef

# 遍历Classes目录

ALLFILES=$(call walk,$(LOCAL_PATH)/../../Classes)

FILE_LIST:=hellocpp/main.cpp

# 从所有文件中提取出所有.cpp文件

FILE_LIST+=$(filter%.cpp,$(ALLFILES))

LOCAL_SRC_FILES:=$(FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_C_INCLUDES:=$(LOCAL_PATH)/../../Classes

哈哈哈,这样我们只用在项目最开始的时候改变Android.mk文件就以后再也不用碰啦!

附我的Android.mk文件,遇到问题可以参考下:

Android

7月23日更新:

感谢子龙大大^_^的补充:

如果classes目录下面有子目录的话,include路径是不对的。

可以再添加FILE_INCLUDES := $(shell find $(LOCAL_PATH)/../../Classes -type d)

然后LOCAL_C_INCLUDES := $(FILE_INCLUDES) 就可以了。

详细可见子龙大大的Android.mk脚本:

https://gist.github.com/andyque/6060595

Ps:因为我都是在程序内部去加相对目录的,所以我的mk也是没有错的!如下:

C++





1

#include
"datapacker/Dpk.h"

做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk,码迷,mamicode.com

时间: 2024-08-08 14:49:16

做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk的相关文章

一个近40岁程序猿的自诉

作为快要接近40岁的码农(目前工作已经不完全是写代码了),我的生活重点已经逐步放到了孩子身上.平时正常6点下班,偶尔加班.晚上陪儿子看书画画,周末开车带老婆儿子到处走走,每年有一到两次长途旅行. 消费也就只能做到超市财务自由(即走进超市可以不考虑价钱随便买).每周都会去一两次饭店吃饭,但也就一家人两三百元的开销. 唯一算是奢侈点的就是在编程工作的工具上比较舍得投入,比如苹果系列产品,27寸iMac.RetinaMacBookPro.iPad.iPhone,另买了比较好的电脑椅和cherry机械键

第二章 做一个简短的C++程序

第二章 做一个简短的C++程序 2.  输出语句的使用 endl要调用flush函数刷新缓冲区,而\n不需要调用 4.iostream与iostream.h的区别 5.  重名问题 释放命名空间的两种方法(1.所有 2局部) using namespace std; using std::endl; 本章总结: 1 //#include<iostream.h> 2 #include<iostream> //标准输入输出流,包含于std中,包含了cin.cout等关键字 3 usin

做一个有脑子的程序员

程序员是最理性的一个群人,除非面对电子产品的时. 程序员是一群高智商的群体,唯一的缺点就是发际线总是很难防守. 程序员是一群情商比较低的人群,常常看到程序员仅仅因为对技术的理解不同而大吵起来. 程序员常常是一群豁达的人,今天大吵一架明天接着聊代码. 但今天要讨论的却是,做一个有脑子的程序员. 有一个朋友也开了公众号,偶尔写写自己对技术的理解,平时也没怎么宣传,所以同事都不知道.有一天一个同事问他一个关于微服务的问题,刚好他前两天研究了这块,就将公众号中的文章分享给了同事. 同事看完之后解决了问题

一个十二年老程序猿的碎碎念h5牛牛程序出售

我是一名程序猿,在上95年上初中的时候h5牛牛程序出售(http://h5.hxforum.com) 联系方式170618633533企鹅2952777280 源码出售 房卡出售 后台出租有意者私聊扣扣,别的还在都在打篮球.踢足球的时候,我就已经在玩QBasic了,每逢跟其他程序猿说起这段的时候,大家都会投过来羡慕的眼光,其实没有你们想的那么好,反而挺悲催的,当时的同学们都不知道我在说些啥,另外我至今都不会打篮球.踢足球.果然不出意外(不会有意外的,我大学填报的所有志愿都是计算机系)的大学毕业后

如何成为一个牛逼的程序猿

这个题目的噱头太大,要真的写起来, 足够写一本书了. 本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路. 每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人. 一.C/C++语言 如果你的基础很差, 建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进.C语言的书嘛,先买一本 300 页以内的,把书中的每一个例子都通过键盘敲打进去到 Visual studio里面去,然后单步执行,逐行调试去看各个变量的值.或者自行添加一些printf语句去输

一个六年的程序猿从零开始--学会分享

转眼间工作已经六年了,从刚毕业的小鲜肉变成了现在的老腊肉,而且还是在一个公司里(呵呵). 从最开始刚实习啥都不懂,到现在成为公司的主程,回想一下自己的成长经历有喜悦也有痛苦.记得大家一起敲代码加班的日子,记得大家一起探讨技术.业务的日子,记得自己从零开始搭建项目的日子,记得第一次带领团队搭建平台的日子,记得每次在公司做技术分享.培训的日子,回想起来自己还是收获很多很多. 业务.技术是需要自己学习积累的,六年的工作中让我深刻的明白了,培养一套自己的学习方法,一套自己分析问题解决问题的方法是多么重要

一个妹子写给程序猿男友的情书

从2008年到2015年,我们一起走过了八年的时光 以前那个由于我一句"非常委屈"就躲着偷偷哭的大男孩 竟会成为陪伴我从豆蔻到白首的那个人 你经常说,遇见我,是你最好的福气 而我经常想,遇见你,会不会花光了我一辈子的运气 对全部的大学情侣来说.毕业就分手真的是不可避免的 我们也没有躲过 刚刚毕业的那会.你没有选择软件专业工作 口口声声的说,在学校学的东西根本找不到工作,就选择了销售 我坚持了自己的专业.開始给一些装修公司画装修图 做了销售的你.開始变的繁忙起来 会给我做可口饭菜的你,却

利用map的特性做一个简易的投票程序

pair 1. 概念:pair是 一种模版类型,每个pair 可以存储两个值,这两种值的类型无限制.也可以将自己写的struct类型的的对象放进去. 2. 用法: pair<int ,int >p (1,2); pair<int ,int > p1= make_pair(1,2); 3. 编写程序读入一系列string和int型数据,将每一组存储在一个pair对象中,然后将这些pair对象存储在vector容器并显示 #include<iostream> #includ

WebBrowser控件做一个简单便捷的程序

备注(这个程序很简单,只是为了方便快捷) 现在的信息管理系统都是像web form类似,所以必需打开浏览器才可以用.每次用到时都要打开浏览器登录,觉得很麻烦.如何把它做成一个像已经安装在自己电脑桌面的应用程序就很方便了.现在就简单用WebBrowser控件简单实现做这么一个的程序. 如下图:需要在打开浏览器才可以打开的系统 下图是把它做成像安装在自己电脑桌面的系统 这样的程序非常简单,新建一个项目,简单布局设置你自己想要窗体.然后用一个WebBrower控件填满整个窗体.把控件的rul属性设置成