参考 2011 年 4 月 12 日发布的 ISO/IEC 9899:201x N1570 委员会草案编程语言 - C,应该有一个函数
timespec_get()
(参见 7.27.2.5)。
但是 MinGW gcc 版本 8.2.0 在使用
warning: implicit declaration of function 'timespec_get'
编译以下代码片段时返回 error: 'TIME_UTC' undeclared
和 gcc -std=c11 snippet.c
:
#include <time.h>
int main() {
struct timespec tstart;
timespec_get(&tstart, TIME_UTC);
return 0;
}
这是为什么?
除了
-std=c11
之外,您还应该为编译器使用 -D_UCRT
选项,为链接器使用 -lucrt
选项。
有有效的 CMakeLists.txt 和 cmake 调用
$ cat CMakeLists.txt
cmake_minimum_required (VERSION 3.10)
project(timespec_get)
set(EXE_NAME test)
set(MAIN_SOURCES
${PROJECT_SOURCE_DIR}/src/test.c
)
add_executable(${EXE_NAME} ${MAIN_SOURCES})
if (${MINGW})
set(CMAKE_C_FLAGS "-W -Wall -Wextra -std=c11 -D_UCRT")
target_link_libraries(${EXE_NAME} -lucrt)
else ()
set(CMAKE_C_FLAGS "-W -Wall -Wextra -std=c11")
endif ()
cmake 调用:
cmake -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw64.cmake
和结果
$ make
[ 50%] Building C object CMakeFiles/test.dir/src/test.c.obj
[100%] Linking C executable test.exe
[100%] Built target test