编写 android.mk 中 LOCAL_C_INCLUDES 的技巧

已废弃, 请参考Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES

在编写android.mk的过程中,免不了要修改LOCAL_C_INCLUDES来设置头文件的include目录, 一般写成这样

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
                     $(LOCAL_PATH)/../../Classes/game \
                     $(LOCAL_PATH)/../../Classes/logic \
                     $(LOCAL_PATH)/../../Classes/view                    

有一个目录就要写一行, 实在繁琐, 有没有写法可以把源码目录下的所有子目录都引入呢, 看下面

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_C_INCLUDES += $(shell ls -FR $(LOCAL_C_INCLUDES) | grep $(LOCAL_PATH)/$ )
LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES:$(LOCAL_PATH)/%:=$(LOCAL_PATH)/%)

即可把$(LOCAL_PATH)/../../Classes目录和子目录全部包含进来

还有一种写法, 就是使用sed命令, 效果是一样的, 我对sed不是很熟悉, 简单写了一下

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes    
LOCAL_C_INCLUDES += $(shell ls -FR $(LOCAL_C_INCLUDES) | grep $(LOCAL_PATH)/$ | sed "s/:/ /g" )

这两行和上面三行的结果是一样的

如果要方便的引入源文件到android.mk文件里, 可以参考我的这篇post:编写Android.mk中的LOCAL_SRC_FILES的终极技巧

以上代码在 mac + NDK r8e 下测试通过

Mac下的命令行小程序调用词典查单词

查个单词还得打开词典app或才打开浏览器到google翻译, 这对于大多时间在终端中的我们来说来回切换窗口实在是不方便, 提供一个小程序可以在命令行下查单词

使用你喜欢的编辑器创建源文件dict.m, 比如,我这里是

mate dict.m

main.m文件里输出我们的程序代码, 看我的写的简单注释就能懂了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
//判断参数, 如果参数不对, 打印使用方法
if(argc < 2)
{
printf("Usage: %s [word to translate]\n", argv[0]);
printf("示例: \n%s apple\n", argv[0]);
return -1;
}
//获取需要查找的单词
NSString * search = [NSString stringWithCString: argv[1] encoding: NSUTF8StringEncoding];
//通过CoreServices查找单词的翻译
CFStringRef def = DCSCopyTextDefinition(NULL,(CFStringRef)search,CFRangeMake(0, [search length]));
//输出结果
NSString * output = [NSString stringWithFormat: @"Definition of <%@>:%@\n", search, (NSString *)def];
printf("%s", [output UTF8String]);
}
return 0;
}

所有的代码就是这些了, 其中使用了DCSCopyTextDefinition,可到苹果开发网站上查看详细介绍.

编译源文件dict.m, 我这里使用clang, 你也可以使用gcc

clang dict.m -o dict -framework CoreServices -framework Foundation -O2

Read More

黑苹果升级Mac OS X 10.8.4

我这台黑苹果已经比较完美,平时使用没有任何问题, 今天看到App Sotre里有10.8.4的更新, 备份/System/Library/Extensions后直接点击下载安装更新, 重启时加参数-f, 进入系统后声卡失效, 重新安装备份的声卡驱动, 一切正常, 其他驱动未动, 显卡正常, 睡眠正常

update SeaBIOS on Google Chromebook Pixel

Google的新笔记本chromebook pixel支持Corebook启动SeaBIOS,这样就可以启动安装Windows,Linux,甚至Mac OS X操作系统
Pixel自带的SeaBIOS版本是SeaBIOS Version: 20121017_154325-build69-m2,[SeaBIOS]是开源软件,我们可以升级这笔记本自带的版本

  1. 设置笔记本进入开发者模式

    关机,按住ESC键和Refresh键,再按电源键开机.
    按Ctrl+D键,确认,会清空所有文件和设置,并重启到dev-mode
    警告界面,按Ctrl+D进入Chrome OS, 按Ctrl+L进入SeaBIOS,这里按Ctrl+D进入Chrome OS
    进入后,按Ctrl+Alt+T打开Shell界面,输入以下命令

     shell
     sudo bash
     crossystem dev_boot_usb=1 dev_boot_legacy=1
    

    经过以上设置后,在开机界面即可按下Ctrl-L键进入SeaBIOS,并引导U盘等外部存储

  2. 升级SeaBIOS
    下载SeaBIOS For Pixel的20130425版本文件http://www.coreboot.org/~stepan/seabios.cbfs.bz2,解压得到seabios.cbfs,放入U盘备用
    进入Chrome OS系统, 插入保存有升级固件的U盘,按Ctrl+Alt+T打开Shell界面,升级命令如下

     shell
     sudo bash
     cd /media/removable/USB_NAME   #USB_NAME是U盘上分区的名称
     flashrom -r image.rom.origin   #备份原来的固件
     cp image.rom.origin image.rom  #复制一份,准备操作
     dd if=seabios.cbfs of=image.rom seek=2 bs=2M conv=notrunc   #将下载的新SeaBIOS写入固件镜像文件
     flashrom -w image.rom -i RW_LEGACY  #将固件刷入设备
    
  3. 重启,按Ctrl-L,就可以看到新版本的SeaBIOS.

参考资料:
Chromebook Pixel
Updating SeaBIOS on a Chromebook