如何在c make文件中包含clock_gettime

时间:2015-07-29 18:56:21

标签: c

我知道为了使用clock_gettime(2)函数,你必须在makefile中包含-lrt,但我不知道它在哪里。我将把它放在示例makefile中。

CFLAGS = -g -Wall -std=c99
CC = gcc

objects = example.o

example: $(objects)
    $(CC) $(CFLAGS) -o example $(objects)

example.o: example.c
    $(CC) $(CFLAGS) -c example.c
clean:
    rm test $(objects)

编辑:我的lrt看起来如何。

enter image description here

enter image description here

我的代码是什么:

#include "stdio.h"
#include "stdlib.h"
#include <time.h>

int main(int argc, char *argv[]) {

    struct timespec starttime, endtime;
    double elapsed;
    clock_gettime(CLOCK_REALTIME, &starttime);

    /// work to be timed

    clock_gettime(CLOCK_REALTIME, &endtime);
    elapsed = ((endtime.tv_sec-starttime.tv_sec)*1000000000.0 + (endtime.tv_nsec - starttime.tv_nsec))/1000000000;
    // elapsed time can also be calculated as
    if (endtime.tv_nsec < starttime.tv_nsec) {
        // borrow a second
        elapsed = (endtime.tv_sec - starttime.tv_sec - 1) + (1000000000.0 + endtime.tv_nsec - starttime.tv_nsec)/1000000000;
    }
    else {
        elapsed = (endtime.tv_sec - starttime.tv_sec ) + (endtime.tv_nsec - starttime.tv_nsec)/1000000000;
    }
}

3 个答案:

答案 0 :(得分:3)

您希望将其放在链接可执行文件的行上。即,指定-o选项的行。这就是执行链接器阶段的地方。

example: $(objects)
    $(CC) $(CFLAGS) -o example $(objects) -lrt

答案 1 :(得分:0)

CFLAGS = -g -Wall -std=c99
CC = gcc
LDFLAGS = -lrt

objects = example.o

example: $(objects)
    $(CC) $(CFLAGS) -o example $(objects) $(LDFLAGS)

example.o: example.c
    $(CC) $(CFLAGS) -c example.c
clean:
    rm test $(objects)

由于这是链接器选项,因此最好用作LDFLAGS变量,这是Makefile中的常见做法。

答案 2 :(得分:0)

其他答案是正确的,但您的问题似乎是您没有包含必要的头文件。

在源代码中添加:

#include <time.h>