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要高。

  • 相关阅读:
    AngularJS Insert Update Delete Using PHP MySQL
    Simple task manager application using AngularJS PHP MySQL
    AngularJS MySQL and Bootstrap Shopping List Tutorial
    Starting out with Node.js and AngularJS
    AngularJS CRUD Example with PHP, MySQL and Material Design
    How to install KVM on Fedora 22
    Fake_AP模式下的Easy-Creds浅析
    河南公务员写古文辞职信
    AI
    政协委员:最大愿望是让小学生步行上学
  • 原文地址:https://www.cnblogs.com/lexus/p/2703727.html
Copyright © 2011-2022 走看看