使用gnu automake编译helloworld
使用gnu automake编译helloworld
按照许多介绍automake基本步骤的教程中的说法,我在尝试使用automake编译helloworld示例程序的时候,仍然遇到了几个小坑,所幸后面都解决了。
下面把我的编译步骤给列出来。
1. 创建helloworld目录,进行目录后创建helloworld.c文件:
mkdir helloworld
cd helloworld
vim helloworld.c
helloworld.c的内容如下:
#include <stdio.h>
#include <stdlib.h> //注意:需要添加此两行头文件
int main(int argc, char** argv)
{
printf("Hello, Linux World!\n");
return 0;
}
2. 使用autoscan扫描当前目录,生成configure.scan,将生成的文件修改文件名称为configure.ac(注意:修改后名称不是configure.in),编辑其内容,包括修改AC_INIT行为目标程序名称、版本号、出错向指定邮箱发邮件,在AC_CONFIG_HEADERS行后添加AM_INIT_AUTOMAKE行,修改AC_OUTPUT行。修改后的configure.ac内容如下:
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT(helloworld, 1.0, #########@##.com)
AC_CONFIG_SRCDIR([helloworld.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(main, 1.0)
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files. AC_CHECK_HEADERS([stdlib.h])
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT([Makefile])
3. 在当前目录下创建Makefile.am,内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
main_SOURCES=helloworld.c
注意:此处的bin_PROGRAMS后面的main与AM_INIT_AUTOMAKE括号里面设置项一致即可。
4. 按顺序分别执行aclocal、autoconf、autoheader、automake --add-missing即可。
5. 此时应该可以执行三步曲 ./configure、make、make install操作了。如果不想安装到公共目录中,可以不用运行make install的。
6. 运行./helloworld查看输出结果。
以上只是使用automake中最简单的flat情况的处理步骤。automake按照一个项目的目录结构,可以将编译过程分为三种情况,flat、shallow、deep。至于如何进行后两种情况的处理,真实复杂的项目还会将不同项目、或者使用不同编译选项生成的库文件、可执行文件合并放到指定的目录中,本人仍在努力领悟中。或许可以下载一些开源软件学习它们的configure.ac、Makefile.am里面的技巧也会很不错。
使用gnu automake编译helloworld的更多相关文章
- 一个简单的执行程序的GNU automake自动生成Makefile的方法及案例
一个简单的执行程序的GNU automake自动生成Makefile的方法及案例 在GNU的世界里,存在Automake这样的工具进行自动生成Makefile文件,automake是由Perl语言编写 ...
- Linux下使用autoconf 和 automake 编译简单的HelloWorld
使用过开源C/C++项目的同学都知道,标准的编译过程已经变成简单的三部曲:./configure /make/make install,使用起来很方便,不像平时自己写代码,要手写一堆复杂的makefi ...
- Linux - wxWidgets安装和编译HelloWorld
安装参考http://codelite.org/LiteEditor/WxWidgets30Binaries#toc2 源 /etc/apt/source.list deb http://repos. ...
- centos编译helloworld的几个小问题
1.GCC使用在使用GCC编译程序时,编译过程可以被细分为四个阶段:预处理(Pre-Processing)编译(Compiling)汇编(Assembling)链接(Linking).例如: ...
- MINIGUI 编译 helloworld
MiniGui 编译hello.c 文件成功!记载一下! MiniGui 版本v3.0 和 2 编译 差异 是极其的大! 源文件代码 : #include <stdio.h>#in ...
- 手动调用NDK编译HelloWorld
首先,你得有NDK(木有的自行搜索) /home/xxxx/tools/android-ndk-r12b 准备好你的HelloWorld程序源码: #include<stdio.h> in ...
- [troubleshoot][automake] automake编译的时候发生死循环
在某台特有设备上,编译dssl工程时,竟然发生了死循环. https://github.com/tony-caotong/libdssl 错误日志如下: checking zlib.h presenc ...
- Linux下gcc和g++编译helloworld
linux C(hello world) 1.使用vi/vim进行编写代码并保存为hello_world.c.如下: 1 2 3 4 5 6 /* This is my first C program ...
- rtems的GNU(GCC)编译环境配置
// 创建目录 /home/shael/rtems/build //存放解压包和编译包目录 /home/shael/rtems/archive //存放源码包目录 /home/shael/rt ...
随机推荐
- 统计 MapReduce 输出路径修改。
先在上一篇MR 的104 行加入代码.jobConf.setOutputFormat(MyMultipleFilesTextOutputFormat.class); 用意是自定义 job 的输出格式: ...
- Spring-statemachine fork一个region后不能进入join状态的问题
Spring-statemachine版本:当前最新的1.2.3.RELEASE版本 发现fork多个Region时,子状态全部完成后能够进入join状态.但是如果fork一个Region时Regio ...
- MethodFilterInterceptor(方法拦截器)配置excludeMethors
由于该类有setExcludeMethods方法,因此在xml中可以配置一个excludeMethods参数 刚开始老是拦截不成功,tomcat显示这个参数没找到,后来终于找到错误:不应该在拦截器栈中 ...
- ArcGIS api for javascript——图形-增加图形到地图
描述 本例展示了如何使用Draw工具栏在地图上描绘许多种类的几何体.ArcGIS JavaScript API包含工具栏. 工具栏不是一个在页面上自动地可见的用户界面组件.相反,工具栏是一个助手类,可 ...
- java读取jpg图片旋转按比例缩放
//入口 public static BufferedImage constructHeatWheelView(int pageWidth, int pageHeight, DoubleHolder ...
- LeetCode 0、《两数相加》
一.给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 ...
- shell的结构化命令
shell在逻辑流程控制这里会根据设置的变量值的条件或其他命令的结果跳过一些命令或者循环执行的这些命令.这些命令通常称为结构化命令 1.if-then语句介绍 基本格式 if command then ...
- SSH—指定登录的IP
设置ssh安全--指定的IP登陆 为了服务器更加具有安全性,我们可以设置ssh安全只允许用户从固定的IP进行登陆, 首先获取要登录服务器的电脑的IP地址 登录http://www.ip138.com/ ...
- 小米开源便签Notes-源码研究(1)-导出功能整体思路
NotesListActivity是入口Activity. 响应菜单事件,我的手机是"左键菜单".如果菜单项的ID是"R.id.menu_export_text" ...
- 【Codeforces Round #459 (Div. 2) A】Eleven
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 这个数列增长很快的. 直接暴力模拟看看是不是它的一项就好了 [代码] #include <bits/stdc++.h> ...