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 呢?
答案是使用 autoconfautomake 工具。


首先 写一个 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
上一篇:共享内存
下一篇:c++中的10种常见继承

发表评论

最新留言

很好
[***.229.124.182]2025年03月19日 18时02分10秒