c - 如何仅在使用 CMake 构建的 Linux 上使用特定于 Linux 的 API 和库?

标签 c linux macos cross-platform cmake

我有一个项目(主要)在 Linux 上运行,但有时在 Darwin/Mac OS X 上运行。我使用 CMake 在 Linux 上生成 Makefile,在 Mac OS X 上生成一个 Xcode 项目。到目前为止,它运行良好。

现在我想使用一些特定于 Linux 的函数(clock_gettime() 和相关函数)。当我尝试使用 clock_gettime() 时,我在 Mac OS X 上遇到链接器错误,所以我认为它只在 Linux 上可用。我准备在 .c 文件中引入条件编译代码来使用 clock_gettime()在 Linux 和普通旧版上 clock()在 Mac 操作系统上。 (顺便说一句,我打算使用 #include <unistd.h>#if _POSIX_TIMERS > 0 作为预处理器表达式,除非有人有更好的选择。)

涉及 CMakeLists.txt 文件时,事情变得棘手。在跨平台 CMake 项目中仅在 Linux 构建下引入与 Linux 特定 API 的链接的首选方法是什么?

注意:此问题的早期版本包含对 glibc 的引用,该引用过于具体且令人困惑。问题实际上是关于在跨平台 CMake 项目中使用特定于 Linux 的 API 和库的正确方法。

最佳答案

从你的例子中抽象出来,只回答这个问题:

How to use Linux-specific APIs and libraries only on Linux builds with CMake?

CMake 提供 numerous useful constants您可以检查以确定您正在运行的系统:

if (${UNIX})
  # *nix-specific includes or actions
elsif (${WIN32})
  # Windows-specific includes or actions
elsif (${APPLE})
  # ...
endif (${UNIX})

关于c - 如何仅在使用 CMake 构建的 Linux 上使用特定于 Linux 的 API 和库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8774866/

相关文章:

android - 如何在 Android/Linux 中更改开始日期?

linux - 虚拟化环境下的CLFLUSH

regex - Grep 表达式排除了我想要的一些匹配项

c++ - 真的有类似 Objective C++ 的东西吗?

cocoa - OSX 上的高分辨率和高帧率鼠标坐标? (或者其他解决方案?)

c - gets() 不要求输入,除非在它之前使用 getchar() 或另一个 gets()

无法在头文件中分配结构变量

c - 数组/指针和 scanf

c - C中指针的问题

java - 操作系统 X : set application icon when launching Java/Swing application from shellscript