zoukankan      html  css  js  c++  java
  • cmake与autoconf+automake的对比

    cmake与autoconf+automake的对比 - 缘起 - 博客频道 - CSDN.NET


    cmake与autoconf+automake的对比


    分类:
    C++


    619人阅读
    评论(0)
    收藏
    举报

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

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

    1. 运行autoscan命令

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

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

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

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

    6. 运行aclocal命令

    7. 运行autoconf命令

    8. 运行automake -a命令

    9. 运行./confiugre脚本

    我们再看看cmake的步骤:

    1. 编写CMakeLists.txt
    2. 运行cmake命令

    9比2,当然不是比分是步骤。

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

    • atuoconfig的配置文件configure.ac我们通过autosan生成,我们只需要修改就可以、autoconfig的配置文件Makefile.am我们需要自己手工从头编写;
    • cmake的配置文件CMakeLists.txt需要手工编写,当然cmake提供了gui的配置工具供大家使用;

    我们再看看他们配置文件的内容吧,这是我们的比较的重点,因为这是我们实际使用的关键步骤:

     autotoolscmake
    变量定义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  ...)
    libtoolAC_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_DISTinstall(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要高。

  • 相关阅读:
    亚马逊的客户服务和承诺
    亚马逊云主管:我们有可能成为全世界最大的企业公司
    阿里市值超越亚马逊 马云开启下半场技术理想
    股价飙升500倍,市值超过4700亿美元,从网络书店起家的亚马逊凭什么一飞冲天?
    美国女子不断收到中国神秘快递,背后原因竟是刷单
    亚马逊称网络星期一成公司史上“最大的购物日
    万众创业葬送了多少人的前程
    日本企业遭遇严重用工短缺
    培生同意以3亿美元出售华尔街英语
    亚马逊500多名欧洲员工宣布在“黑色星期五”罢工
  • 原文地址:https://www.cnblogs.com/lexus/p/2703727.html
Copyright © 2011-2022 走看看