5 Creating a Makefile.in

目录


在源码包根目录中无参数运行 automake命令就会生成所有的 Makefile.inautomake通过读取 configure.ac找到每个 Makefile.am,并对每个 Makefile.am生成一个对应的 Makefile.in。注意 automake认为一个源码包只在其根目录中有一个 configure.ac文件。如果某个源码包中包含多个 configure.ac,需要在每个包含 configure.ac的目录中运行 automake命令,以生成对应目录层次下的所有 Makefile.in。(可以通过Autoconf的 AC_CONFIG_SUBDIRS宏使包含多个 configure.ac的源码包只在根目录中执行一次 automake
可以传递给 automake一个参数,该参数附加上 .am就是 automake是输入文件名称。这种方式一般只用于自动重新构建一个过期的 Makefile.in。( 测试过程中手动执行automake Makefile 只更新了根目录下的 Makefile.in)。注意: automake只能在源码包根目录中运行,即使是为了重新生成某些子目录中的 Makefile.in。这不仅是因为 automake需要读取 configure.ac,也是因为 automake在更新某个子目录中的 Makefile.in时,需要知道“要更新的 Makefile.in在子目录中”这件事,以此更改 automake的一些动作。
Automake会运行 autoconf来读取 configure.ac和它的依赖关系(如 aclocal.m4和其他包含的文件),因此 autoconf必须在 PATH环境变量中。如果环境变量中有一个 AUTOCONF变量,则该变量会覆盖 PATH变量中的 autoconf,该特性允许你指定一个Autoconf的特定版本。注意,上述所说的 automake运行 autoconf读取 configure.ac只是读取而已,并不会生成 configure脚本,所以还是需要在执行 automake前手动执行 autoconf
automake接受以下参数:

  1. -a
    –add-missing
    Automake在特定条件下需要特定的通用文件。例如,如果configure.ac使用了AC_CANONICAL_HOST宏,Automake就需要config.guess文件。Automake在发布时携带了几个这样的通用文件,这个选项使Automake在源码包中发现某些需要的通用文件缺失时,如果自己的发布中包含该文件会自动将缺失的文件拷贝到源码包中。如果automake上报某些文件缺失,可以尝试该选项。默认情况下,Automake在源码包中创建缺失文件的符号链接指向自己发布中携带的相应通用文件,可以通过 –copy选项改变默认动作。
    很多可能缺失的文件是一些存储位置由AC_CONFIG_AUX_DIR宏指定了的通用文件。所以AC_CONFIG_AUX_DIR设置后不仅会影响判断哪些文件缺失了,还会影响缺失的文件会被添加到哪。
    在某些严格模式下,一些额外的文件会被安装。
  2. –libdir=dir
    在该选项指定的目录dir中查找Automake数据文件而不是在Automake安装路径中查找。这通常用于调试。
    环境变量AUTOMAKE_LIBDIR也可以指定Automake数据文件查找目录,但该选项会覆盖掉它。
    例如ubuntu下apt install安装Automake安装时会在/usr/share/automake-1.15目录下安装am/header-vars.am等数据文件
  3. –print-libdir
    打印Automake安装时的脚本和数据文件(如texinfo.texiinstall-sh)安装位置。
  4. -c
    –copy
    –add-missing选项同时使用是会拷贝缺失的文件,而不是创建这些文件的符号连接。
  5. -f
    –force-missing
    –add-missing选项同时使用时,会强制添加Automake需要的所有标准文件,即使某些文件已经存在。这会导致source tree中已经存在的标准文件被删除,然后以与处理缺失文件相同的方式创建符号连接指向Automake自身携带的相应文件。(如果再加上**–copy**,直接拷贝而不是创建符号连接)
  6. –foreign
    设置全局严格性检查等级为foreign。3.2节讲述有有关严格性检查的内容。
  7. –gnits
    设置全局严格性检查等级为gnits
  8. –gnu
    设置全局严格性检查等级为gnu
  9. –help
    打印一些命令行选项的摘要,然后退出Automake。
  10. -i
    –ignore-deps
    关闭在生成Makefiles文件时的依赖关系跟踪。
  11. –include-deps
    使能在生成Makefiles文件时的依赖关系跟踪。该特性是默认开启的。该选项是由于历史原因添加,一般不使用。
  12. –no-force
    通常automake生成所有configure.ac提到的Makefiles对应的Makefile.ins。该选项使automake只更新那些相对于其依赖已经变旧的Makefile.in
  13. -o dir
    –output-dir=dir
    将生成的Makefile.in放到指定目录dir中。通常Makefile.in与其对应的Makefile.am在同一目录。
  14. -v
    –verbose
    使Automake打印一些关于正在读取或生成的文件的信息。
  15. –version
    打印Automake的版本信息,然后退出。
  16. -W CATEGORY
    –warnings=category
    输出关于category的警告信息。category可以是下列类别中的一个:
    1)gnu
    与GNU Coding Standards相关的警告
    2)obsolete
    废弃的特性或结构
    3)override
    用户重复定义的Automake规则或变量
    4)portability
    移植性问题
    5)extra-portability
    额外的与某些模糊工具相关的移植性问题。类似的工具比如Microsoft lib archiver。
    6)syntax
    奇怪的语法问题,未使用的变量,错别字等
    7)unsupported
    不支持或未实现的特性
    8)all
    所有警告
    9)none
    关闭所有警告
    10)error
    将警告上报为错误

上述每种警告类型都可以在名字前边加前缀no- 来关闭它。比如,-Wno-syntax会隐藏未使用变量相关的警告。默认情况下Automake会打印‘obsolete’,、‘syntax’ 和‘unsupported’三种警告。此外,‘gnu’ 和‘portability’警告在 –gnu–gnits严格性检查级别下也会打印。
关闭‘portability’也会关闭‘extra-portability’,类似的开启 ‘extra-portability’也会开启‘extra-portability’。但是,打开 ‘portability’ 或关闭 ‘extra-portability’ 不会影响自身外的警告类型。
环境变量WARNINGS可以定义一个以逗号分隔的要使能的警告类型列表。在命令行执行时会考虑到该环境变量,但命令行的 -Wnone选项的效果会覆盖掉环境变量WARNINGS。该环境变量还会被其他工具如autoconf使用,所以不识别的警告类型会忽略掉。
如果环境变量AUTOMAKE_JOBS定义为正数值,该值表示automake可以启动多少个Perl线程来并发生成多个Makefile.in文件。这是个正在实验中的特性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值