如何配置autoreconf读取CRLF格式configure.ac时自动转为LF?
Autotools autoreconf处理CRLF换行符输入的解决方案
autoreconf本身没有内置的命令行参数,也没有对应的AC_*系列m4宏可以实现读取输入文件时自动将CRLF转换为LF的功能。
Autotools工具链原生基于类Unix环境设计,默认仅适配LF作为换行符,不会主动处理输入文件中的CRLF字符。出现的configure执行报错、换行符混杂的问题,本质是输入的configure.ac等文件携带CRLF换行符,autoreconf处理时未做统一转换,导致生成的脚本中同时存在两种换行符,shell解析时出现截断问题,才会输出含义模糊的报错:
.in'ig.status: error: cannot find input file: `
以下是两种可行的解决方式:
- 从Git检出根源解决换行符问题
可以在项目根目录新增.gitattributes文件,指定所有Autotools相关文件强制使用LF换行符,适配跨平台检出场景,配置示例:
如果仅本地临时调整,也可以在检出项目前执行*.ac text eol=lf *.am text eol=lf configure text eol=lf Makefile.in text eol=lfgit config core.autocrlf input,该配置会让Git检出文件时保留LF换行符,提交时自动将CRLF转换为LF,适配Windows下MSys环境的使用需求。 - 本地已检出文件的快速转换方案
如果已经拿到带CRLF换行符的项目文件,可以在执行autoreconf前用dos2unix工具批量转换换行符:
转换完成后再执行find . -name "*.ac" -o -name "*.am" | xargs dos2unixautoreconf,生成的configure脚本就会统一使用LF换行符,不会再出现执行报错的问题。
内容的提问来源于stack exchange,提问作者Андрей Щеглов
相关产品推荐
相关产品推荐

