
linux 下的 autotools 使用
构建
发布日期:2021-05-08 04:53:57
浏览次数:23
分类:原创文章
本文共 2084 字,大约阅读时间需要 6 分钟。
在Linux环境下,当拿到一份源码,安装过程通常简单如下:
./configuremakemake install
c project 源码中通常有个 configure
程序,确切来说他是一个shell脚本。他的作用就是检测当前操作系统和一些执行环境(比如依赖和编译器等),然后根据这些信息生成 Makefile
文件。
一般项目中不会有 Makefile
,通过configure
结合 Makefile.in
文件 生成 Makefile
。
有了 Makefile
,就可以 make && make install
了。
构建 configure
脚本 和 Makefile.in
如果自己的 c
项目,如何构建 configure
脚本和 Makefile.in
呢?
答案是使用 autoconf
和 automake
工具。
首先 写一个 m4sh 格式的文件 configure.ac
:
AC_INIT([helloworld], [0.1], [george@thoughtbot.com])AM_INIT_AUTOMAKEAC_PROG_CCAC_CONFIG_FILES([Makefile])AC_OUTPUT
再写一个 Makefile.am
文件:
AUTOMAKE_OPTIONS = foreignbin_PROGRAMS = helloworldhelloworld_SOURCES = main.c
接下来,先使用 aclocal
工具(aclocal
会自动扫描 configure.ac
),生成 aclocal.m4
文件,这个文件定义了一些 macro 以便后面 automake 工具使用。
命令行输入:
aclocal
autoconf
根据 configure.ac
文件生成 configure
脚本。
在命令行里输入:
autoconf
automake
根据 Makefile.am
文件生成 Makefile.in
文件。
在命令行里输入:
automake --add-missing
安装程序
接下来就可以通过:
./configuremakemake install
完整项目例子
tmp.c
#include <stdio.h>#include <stdlib.h>#include <pthread.h>void* threadfunc(void* arg) { printf("before malloc in thread \n"); getchar(); char* addr = (char*)malloc(100); printf("after malloc in thread \n"); getchar(); free(addr); printf("after free mem in threed \n"); getchar(); return (void*)(NULL);}int main(int argc, char* argv[]) { printf("hello world"); printf("before malloc in main thread \n"); getchar(); char* addr = (char*)malloc(100); printf("after malloc in main \n"); getchar(); free(addr); printf("after free add in main \n"); getchar(); pthread_t t; int pc = pthread_create(&t, NULL, threadfunc, NULL); if (pc != 0) { printf("thread create faild\n"); return -1; } void* s; int pj = pthread_join(t, &s); if (pj != 0) { printf("thread join faild\n"); return -1; } return 0;}
configure.ac
AC_INIT([helloworld], [0.1], [jianyongli@tencent.com]) AM_INIT_AUTOMAKE AC_PROG_CC AC_CHECK_LIB(pthread, pthread_create) AC_CONFIG_FILES([Makefile]) AC_OUTPUT
Makefile.am
AUTOMAKE_OPTIONS = foreignbin_PROGRAMS = helloworldhelloworld_SOURCES = tmp.c
发表评论
最新留言
很好
[***.229.124.182]2025年03月19日 18时02分10秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
本地分支关联远程分支
2019-03-05
STM8 GPIO模式
2019-03-05
STM32boot启动
2019-03-05
omnet++
2019-03-05
23种设计模式一:单例模式
2019-03-05
Qt中的析构函数
2019-03-05
CSharp中委托(一)委托、匿名函数、lambda表达式、多播委托、窗体传值、泛型委托
2019-03-05
二叉堆的c++模板类实现
2019-03-05
C语言实现dijkstra(adjacence matrix)
2019-03-05
用C#实现封装-徐新帅-专题视频课程
2019-03-05
C语言学习从初级到精通的疯狂实战教程-徐新帅-专题视频课程
2019-03-05
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
NAT工作原理
2019-03-05
Processes, threads and goroutines
2019-03-05
c++中的10种常见继承
2019-03-05
Vue学习—深入剖析渲染函数
2019-03-05
Vue学习—深入剖析函数式组件
2019-03-05
简单Makefile的编写
2019-03-05
使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
2019-03-05
wxpython的Hello,World代码探索
2019-03-05