检查 C 头文件是否具有函数 - 使用 CMake
Check if a C header file has a function - with CMake
我想用CMake检查stdlib.h
是否有getopt()
功能(我知道这已经很多年了,但我仍然需要执行这个检查,这个问题是关于一般问题)。
我知道如何检查包含文件是否存在:
check_include_files(malloc.h HAVE_MALLOC_H)
但不存在该文件提供的功能。我该怎么做?
编辑: 实际上 getopt()
从来不在 stdlib.h
中,它通常在 unistd.h
中,但没关系,这个问题可以作为问了。
您可以使用 CheckSymbolExists()
:
CHECK_SYMBOL_EXISTS(getopt stdlib.h HAVE_GETOPT)
我正在考虑使用 CheckFunctionExists()
:
CheckFunctionExists(getopt, HAVE_GETOPT)
...事实证明,我实际上需要这个而不是公认的答案,因为功能的可用性通常对我来说更重要,而不是它是否由某些 header.
您可以使用此代码实现您自己的函数来匹配字符串
#define CHUNK 1024 /* read 1024 bytes at a time */
char buf[CHUNK];
FILE *file;
if (check_file("malloc.h",HAVE_MALLOC_H) == 1)
printf("Match found!");
else
printf("Match not found");
int check_file(char *file_name, char *match_str)
{
file = fopen(file_name, "r");
while(fgets(match_str,CHUNK , file) != EOF)
{
if(strstr(str,match_str) != NULL)
return 1;
}
return 0;
}
我想用CMake检查stdlib.h
是否有getopt()
功能(我知道这已经很多年了,但我仍然需要执行这个检查,这个问题是关于一般问题)。
我知道如何检查包含文件是否存在:
check_include_files(malloc.h HAVE_MALLOC_H)
但不存在该文件提供的功能。我该怎么做?
编辑: 实际上 getopt()
从来不在 stdlib.h
中,它通常在 unistd.h
中,但没关系,这个问题可以作为问了。
您可以使用 CheckSymbolExists()
:
CHECK_SYMBOL_EXISTS(getopt stdlib.h HAVE_GETOPT)
我正在考虑使用 CheckFunctionExists()
:
CheckFunctionExists(getopt, HAVE_GETOPT)
...事实证明,我实际上需要这个而不是公认的答案,因为功能的可用性通常对我来说更重要,而不是它是否由某些 header.
您可以使用此代码实现您自己的函数来匹配字符串
#define CHUNK 1024 /* read 1024 bytes at a time */
char buf[CHUNK];
FILE *file;
if (check_file("malloc.h",HAVE_MALLOC_H) == 1)
printf("Match found!");
else
printf("Match not found");
int check_file(char *file_name, char *match_str)
{
file = fopen(file_name, "r");
while(fgets(match_str,CHUNK , file) != EOF)
{
if(strstr(str,match_str) != NULL)
return 1;
}
return 0;
}