不过还好,它是“八股文”,所有的步骤都是如此。
运行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 | find_library(lib libname pathllist) |
测试程序 | find_package(packename) | |
AC_PROG_CC | find_path(var name pathlist) | |
测试函数库 | find_program(var name pathlist) | |
AC_CHECK_LIB([pthread],[pthread_rwlock_init]) | ||
AC_PROG_RANLIB | ||
测试头文件 | ||
测试类型定义 | ||
测试结构 | ||
测试编译器特性 | ||
测试库函数 | ||
测试系统调用 | ||
AC_OUTPUT | ||
子目录 | SUBDIRS= | add_subdirectory(list) |
可执行文件 | bin_PROGRAMS=binname | add_executable(binname ${sources}) |
binname_SOURCES= | target_link_libraries(binname librarylist) | |
binname_LDADD= | ||
binname_CFLAGS= | ||
binname_LDFLAGS= | ||
动态库 | lib_LIBRARIES=libname.so | add_library(libname shared ${source} ) |
libname_SOURCES= | ||
静态库 | lib_LIBRARIES=libname.a | add_library(libname static ${source} ) |
libname_a_SOURCES= | ||
头文件 | INCLUDES= include_HEADES= 或CFLAGS=-I | include_directories(list) |
源码搜索 | aux_source_directories(. list) | |
依赖库 | LIBS= | target_link_libraries(binname librarylist) |
LDADD= | ||
标志 | CFLAGS= | set(CMAKE_C_FLAGS ...) |
LDFLAGS= | ||
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(my) |
if() | else(my) | |
endif | endif(my) | |
while(condition) endwhile(condition) | ||
执行外部命令 | exec_program(commd ) | |
子模块 | include() | |
信息输出 | messge(STATUS "messge") | |
项目 | project(name) |
我知道的就这些,大家可以帮忙指正补充。cmake相比autotool确实好用,包括KDE在内的很多大型项目也都在使用cmake。不过autotools的使用率仍旧比cmake要高。
原文:
http://blog.csdn.net/cnsword/article/details/7542696