简介

cmake和automake本质上都是用来生成Makefile的工具,为啥Makefile需要工具来生成呢?因为大型的C和C++项目构建步骤特别繁琐,自己维护Makefile特别麻烦,因此懒惰的程序员们开发了各种生成Makefile的工具,cmake和automake就是这样的工具。

automake使用

  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脚本(常见的开源软件基本已经提前生成好了configure文件了)

cmake使用

使用cmake仅需要提供一份CMakeLists.txt, 然后运行cmake命令,即可得到一份Makefile文件。

功能对比

命令 automake 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
ibname_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=
条件语句 使用Make的条件语句 if() endif if(my), else(my), endif(my), while(condition), endwhile(condition)
执行外部命令 exec_program(commd )
子模块 include()
信息输出 messge(STATUS "messge")
项目 project(name)
其他文件 EXTRA_DIST install(FILES files.. ), install(DIRECTORY dirs..)
安装设置 EXTRA_DIST install