我正在迁移项目以使用autotools构建它,并使用autoscan
获取configure.ac
文件的模板。
我想检查生成的configure
脚本是否正在测试某些库头文件,因此我卸载了我在项目中使用的库以进行测试。由于缺少标题,确保编译失败,但配置脚本之前没有检查过这些标题的存在。
我检查了autoscan
的输出文件,似乎autoscan忘记了一些标题:
来自configure.scan
:
AC_CHECK_HEADERS([fcntl.h limits.h stddef.h stdlib.h string.h unistd.h])
项目中包含的所有标题(cat src/*.[c,h] | grep 'include <' | sort | uniq
):
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
#include <limits.h>
#include <mosquitto.h> (library)
#include <owcapi.h> (library)
#include <pthread.h>
#include <signal.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <wait.h>
自动扫描后为什么库头文件和其他libc头文件丢失了?
编辑:函数调用也一样。
答案 0 :(得分:1)
我非常确定autoscan只包含对那些已知丢失的C语言标题的检查,或者对某些(通常是模糊的)编译器或平台的工作方式不同。
总是可以假设存在的标题,它不会检查。
它也不会检查外部库头。您应该通过pkg-config提供自己的检查。