加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何仅在使用CMake的Linux版本上使用特定于Linux的API和库?

发布时间:2020-12-14 01:29:48 所属栏目:Linux 来源:网络整理
导读:我有一个项目,我在 Linux(主要)上运行,但有时在Darwin / Mac OS X上运行.我使用CMake在Linux上生成Makefile,在Mac OS X上生成Xcode项目.到目前为止,这一点运行良好. 现在我想使用一些特定于Linux的函数(clock_gettime()和相关函数).当我尝试使用clock_gettim
我有一个项目,我在 Linux(主要)上运行,但有时在Darwin / Mac OS X上运行.我使用CMake在Linux上生成Makefile,在Mac OS X上生成Xcode项目.到目前为止,这一点运行良好.

现在我想使用一些特定于Linux的函数(clock_gettime()和相关函数).当我尝试使用clock_gettime()时,我在Mac OS X上遇到链接器错误,因此我认为它仅在Linux上可用.我准备在.c文件中引入有条件编译的代码,以便在Linux上使用clock_gettime(),在Mac OS上使用普通的旧时钟(). (顺便说一句,我打算使用#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})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读