为ARM项目编写makefile

时间:2016-05-22 09:55:51

标签: gcc makefile

我的项目结构如下:

.
├── build
├── src
|   ├── rbpi
|   |   └── gpio.h
|   ├── boot.c
|   ├── boot.s
|   └── kernel.c
└── linker.ld

这是一个简单的覆盆子pi内核,使LED闪烁! 我目前使用一个简单的bat文件,其中包含以下内容:

arm-none-eabi-gcc -g -O0 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -mtune=cortex-a7 -nostartfiles -Wl,-T,linker.ld src/kernel.c src/boot.c src/boot.s -o build/kernel.elf
arm-none-eabi-objcopy build/kernel.elf -O binary build/kernel7.img

由于我将向此项目添加更多文件,因此我必须将每个文件追加到我的“buildscript”中 如果可能,我想使用makefile

如果我想要以下“规则”,我的makefile应该如何?

  • 在编译之前,清除*.elf目录中的所有*.imgbuild文件。
  • 汇编*.c目录中的所有*.ssrc个文件。
  • kernel.elf文件输出到build目录。
  • 使用链接描述文件linker.ld
  • 编译完成后,运行objcopy生成二进制文件。

1 个答案:

答案 0 :(得分:4)

一个典型的INSERT INTO `lista_m3u8` (`tipo`, `orden`, `contenido`, `segmento`, `extinf`, `ini`) VALUES ('radio', 20, 'f2z7ddw7r6bb7gfy', 'segment00018.ts', 10.000000000000, '00:03:11'); INSERT INTO `lista_m3u8` (`tipo`, `orden`, `contenido`, `segmento`, `extinf`, `ini`) VALUES ('radio', 21, 'f2z7ddw7r6bb7gfy', 'segment00019.ts', 10.000000000000, '00:03:21'); INSERT INTO `lista_m3u8` (`tipo`, `orden`, `contenido`, `segmento`, `extinf`, `ini`) VALUES ('radio', 22, 'f2z7ddw7r6bb7gfy', 'segment00020.ts', 6.066667079926, '00:03:31'); INSERT INTO `lista_m3u8` (`tipo`, `orden`, `contenido`, `segmento`, `extinf`, `ini`) VALUES ('radio', 23, 'f2z7df1bb66be7h3', 'segment00000.ts', 10.000000000000, '00:03:38'); INSERT INTO `lista_m3u8` (`tipo`, `orden`, `contenido`, `segmento`, `extinf`, `ini`) VALUES ('radio', 24, 'f2z7df1bb66be7h3', 'segment00001.ts', 10.000000000000, '00:03:48'); INSERT INTO `lista_m3u8` (`tipo`, `orden`, `contenido`, `segmento`, `extinf`, `ini`) VALUES ('radio', 25, 'f2z7df1bb66be7h3', 'segment00002.ts', 10.000000000000, '00:03:58'); INSERT INTO `lista_m3u8` (`tipo`, `orden`, `contenido`, `segmento`, `extinf`, `ini`) VALUES ('radio', 26, 'f2z7df1bb66be7h3', 'segment00003.ts', 10.000000000000, '00:04:08'); 可能看起来像......等待有关于GNU Make的文档,这里有一个很好的简单Makefile:  http://www.gnu.org/software/make/manual/make.html#Simple-Makefile

所以对你来说,一个简单的开始可能是:

$actual = sql("SELECT orden, extinf, contenido, segmento, ini FROM lista_m3u8 WHERE tipo = 'radio' AND ini >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MINUTE),'%H:%i:%s') AND ini <= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 3 MINUTE),'%H:%i:%s') ORDER BY orden ASC");

$sale = '#EXTM3U'.PHP_EOL;
$sale .= '#EXT-X-VERSION:3'.PHP_EOL;
$sale .= '#EXT-X-MEDIA-SEQUENCE:'.($actual['data'][$actual['total']-1]['orden'] - $actual['total']).PHP_EOL;
$sale .= '#EXT-X-TARGETDURATION:10'.PHP_EOL;

$contenido = $actual['data'][0]['contenido'];
foreach($actual['data'] as $k=>$v) {
    if($v['contenido'] != $contenido) { $sale .= "#EXT-X-DISCONTINUITY".PHP_EOL; }
    $sale .= "#EXTINF:".$v['extinf'].",".PHP_EOL;
    $sale .= S3URL("audio-bucket",$v['contenido']."/".$v['segmento'],180).PHP_EOL;
    $contenido = $v['contenido'];
}

header("Content-type: application/x-mpegURL");
echo $sale.PHP_EOL;

(小心,食谱必须从一个标签开始,而不是像这里这样的四个空格,这对于了解你的文件很重要,因此复制粘贴将不起作用。)

在编译之前,您实际上不需要删除elf和img文件,这是GNU Make角色,根据文件修改时间知道是否必须重建。

在这里工作:

Makefile

你真的应该看看非常好的文档:http://www.gnu.org/software/make/manual/make.html你将无法在stackoverflow上询问你需要对你的makefile做什么修改,从这个“bootstrap”开始makefile“您应该能够修改它以逐步学习,并以文档作为参考。