cmake与autoconf+automake的对比(图miss)

https://blog.csdn.net/cnsword/article/details/7542696

首先,拿他们对比本身没有太多的意义,他们都是产生makefile文件的工具。cmake产生的晚,解决了很多autotools工具的问题。autotools是一个工具集具有强大的灵活性,但是因为步骤太多,配置繁琐,产生了很多的替代方案,cmake是其中最优秀的之一。当然很多其他替代品不会产生makefile文件而直接具有make的功能了。看到下图,你是不是感觉有些发晕。

 

不过还好,它是“八股文”,所有的步骤都是如此。

运行autoscan命令

将configure.scan 文件重命名为configure.in,并修改configure.in文件

在project目录下新建Makefile.am文件,并在core和shell目录下也新建makefile.am文件

在project目录下新建NEWS、 README、 ChangeLog 、AUTHORS文件

将/usr/share/automake-1.X/目录下的depcomp和complie文件拷贝到本目录下

运行aclocal命令

运行autoconf命令

运行automake -a命令

运行./confiugre脚本

我们再看看cmake的步骤:

编写CMakeLists.txt
运行cmake命令
9比2,当然不是比分是步骤。

那我们再来看一下他们的主要工作,他们的配置文件吧:

atuoconfig的配置文件configure.ac我们通过autosan生成,我们只需要修改就可以、autoconfig的配置文件Makefile.am我们需要自己手工从头编写;
cmake的配置文件CMakeLists.txt需要手工编写,当然cmake提供了gui的配置工具供大家使用;
我们再看看他们配置文件的内容吧,这是我们的比较的重点,因为这是我们实际使用的关键步骤:

     autotools    cmake
变量定义    name=...    set(name, "...")
环境检测    AC_INIT
测试程序
AC_PROG_CC
 测试函数库
AC_CHECK_LIB([pthread], [pthread_rwlock_init])
 AC_PROG_RANLIB
测试头文件
 测试类型定义
 测试结构
 测试编译器特性
 测试库函数
 测试系统调用
AC_OUTPUT    find_library(lib libname pathllist)
find_package(packename)
find_path(var name pathlist)
find_program(var name pathlist)
子目录    SUBDIRS=    add_subdirectory(list)
可执行文件    bin_PROGRAMS=binname
binname_SOURCES=
binname_LDADD=
binname_CFLAGS=
binname_LDFLAGS=    add_executable(binname ${sources})
target_link_libraries(binname librarylist)
动态库    lib_LIBRARIES=libname.so
libname_SOURCES=    add_library(libname shared ${source} )
静态库    lib_LIBRARIES=libname.a
libname_a_SOURCES=    add_library(libname static ${source} )
头文件    INCLUDES=
include_HEADES=
或CFLAGS=-I    include_directories(list)
源码搜索         aux_source_directories(. list)
依赖库    LIBS=
LDADD=    target_link_libraries(binname librarylist)
标志    CFLAGS=
LDFLAGS=    set(CMAKE_C_FLAGS  ...)
libtool    AC_PROG_LIBTOOL
lib_LTLIBRARIES=name.la
name_la_SOURCES=     
安装设置         
install(TARGETS targets...
[[ARCHIVE|LIBRARY|RUNTIME][DESTINATION
< dir >][PERMISSIONS permissions...]
[CONFIGURATIONS[Debug|Release|...]]
[COMPONENT < component >][OPTIONAL]] [...])
其他文件    EXTRA_DIST    install(FILES files.. )
install(DIRECTORY dirs..)
条件语句    使用Make的条件语句
if()
endif    if(my)
else(my)
endif(my)
while(condition)
endwhile(condition)
执行外部命令         exec_program(commd )
子模块         include()
信息输出         messge(STATUS "messge")
 项目         project(name)

我知道的就这些,大家可以帮忙指正补充。cmake相比autotool确实好用,包括KDE在内的很多大型项目也都在使用cmake。不过autotools的使用率仍旧比cmake要高。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值