使用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里面的技巧也会很不错。

时间: 2024-11-10 13:30:29

使用gnu automake编译helloworld的相关文章

一个简单的执行程序的GNU automake自动生成Makefile的方法及案例

/*********************************************************************  * Author  : Samson  * Date    : 01/27/2015  * Test platform:  *              3.13.0-24-generic  *              GNU bash, 4.3.11(1)-release  * ************************************

[troubleshoot][automake] automake编译的时候发生死循环

在某台特有设备上,编译dssl工程时,竟然发生了死循环. https://github.com/tony-caotong/libdssl 错误日志如下: checking zlib.h presence... yes checking for zlib.h... yes checking openssl/ssl.h usability... yes checking openssl/ssl.h presence... yes checking for openssl/ssl.h... yes c

手动调用NDK编译HelloWorld

首先,你得有NDK(木有的自行搜索) /home/xxxx/tools/android-ndk-r12b 准备好你的HelloWorld程序源码: #include<stdio.h> int main(void) { printf("Hello World!\n"); return 0; } 编译之: ~/tools/android-ndk-r12b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin

centos编译helloworld的几个小问题

1.GCC使用在使用GCC编译程序时,编译过程可以被细分为四个阶段:预处理(Pre-Processing)编译(Compiling)汇编(Assembling)链接(Linking).例如:     #include int main(void){       printf ("Hello world, Linux programming!\n");                  return 0;}    然后执行下面的命令编译和运行这段程序:# gcc hello.c -o h

20160908-GCC编译helloWorld的学习

01.创建hello目录:mkdir hello: 02.创建hello.c文件并编辑:vi hello.c: 03.编辑文件时: 1)输入”i”进入插入模式,可输入字符了: 2)按”ESC”键退出插入模式: 3)在非插入模式时,按”x”键可删除选中的字符: 04.         编辑完成后: 1)在非插入模式时,输入”:wq!”保存编辑文件并退出: 2)在非插入模式时,输入”:q!”不保存编辑文件并退出: 05.         GCC编译hello.c命令:”gcc hello.c –o

RedHat下使用gcc编译HelloWorld.cpp

gcc ./HelloWorld.cpp 错误: /tmp/ccZuz3Ca.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'collect2: ld returned 1 exit status 解决办法(两种): 1. 使用g++ ./HelloWorld.cpp 2.将.cpp后缀改为.c Ref: http://www.fx114.net/qa-6-270315.aspx 代码 HelloWorld.cpp

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*/ #include <stdio.h> int main(){         printf("Hello World!\n");         return 0; } 2.使用gcc进行编译 gcc hello_world.c -o hello_world      /

Ubuntu中编译helloworld驱动

1. 新建hello文件夹 2.hello.c #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # define MODULE #endif // 下面的是主要的内容 #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE("GPL"); static

Percona-XtraDB-Cluster+haproxy+keepalived 编译安装

系统:centos7 192.168.1.55 mysql 端口3306 Percona-XtraDB-Cluster 主节点 192.168.1.56 mysql端口3307 Percona-XtraDB-Cluster+haproxy+keepalived 192.168.1.57 MySQL端口3307 Percona-XtraDB-Cluster+haproxy+keepalived 192.168.4.58/21 vip ip 软件版本:Percona-XtraDB-Cluster-5