检查 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;
    }