检查C头文件是否具有函数 - 使用CMake

时间:2018-01-26 11:31:33

标签: c cmake building

我想使用CMake来检查stdlib.h是否具有getopt()功能(我知道这已经存在多年了,但我仍然需要执行此检查,这个问题是关于一般问题)。

我知道如何检查是否存在包含文件:

check_include_files(malloc.h HAVE_MALLOC_H)

但不存在该文件提供的功能。我怎么能这样做?

修改:实际上getopt()永远不在stdlib.h中,通常在unistd.h,但没关系,问题可以按照要求进行。

3 个答案:

答案 0 :(得分:4)

您可以使用CheckSymbolExists()执行此操作:

CHECK_SYMBOL_EXISTS(getopt stdlib.h HAVE_GETOPT)

答案 1 :(得分:2)

我在考虑使用CheckFunctionExists()

CheckFunctionExists(getopt, HAVE_GETOPT)

...事实证明,我实际上需要这个而不是接受的答案,因为函数的可用性通常在我的情况下更重要,而不是它是否由某个标题提供

答案 2 :(得分:1)

您可以使用此代码实现您自己的函数以匹配字符串

        #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;
    }