我有一个项目(主要)在 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/