c - 我如何 robuSTLy 包含可能位于不同(未知)目录中的外部头文件?

标签 c makefile include header-files include-path

我正在尝试编写一个 Makefile,它将在多个平台上编译 C 项目,例如:CentOS、OS X、OpenSUSE。然而,我遇到了一个问题,即外部库的头文件并不总是在同一个地方。我认为这是由于包装,我无法控制。

例如: 同时包含 BLAS 文件 lapacke.h我的 CentOS 安装所需的包含语句是 #include<lapacke.h> .在 OpenSUSE 上,路径是 #include<openblas/lapacke.h>

我可以使用 #include<lapacke.h> , 然后用 -I/usr/include/openblas 编译,这在 CentOS 和 OpenSUSE 上都有效,但我不希望这个包含路径在一般情况下有效,因为其他系统可能会将 openblas 放在不同的位置。我如何配置此项目以在大多数平台上编译而不需要用户手动修改 Makefile?

最佳答案

How do I configure this project to compile on most platforms without requiring users to tinker with the Makefile manually?

因为它适用于一般的图书馆,所以这是一个经典且长期存在的问题。它是构建配置系统(例如 Autotools 和 CMake)以及 pkg-config 实用程序的存在理由的一部分。一些软件包提供了自己的实用程序来报告构建细节。

这些都不是万无一失的。如果您不能或不想依赖其中任何一个,那么您的其他选择基本上就是

  • 让用户提供所需的路径(通过编辑文件或通过软件提供的手动脚本),或
  • 为已知系统类型提供一系列预构建配置,并自动检测或要求用户指定系统类型。

我已经看到了以上所有内容,无论是单独的还是各种组合。

关于c - 我如何 robuSTLy 包含可能位于不同(未知)目录中的外部头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43264244/

相关文章:

makefile - 获取目标的依赖项列表

windows - lnk1104 : cannot open file 'libpng.lib' , 但 'libpng.lib' 是输出,不是输入

c - Makefile 的问题

php - 如何从 www 目录之外运行带有 wamp 的 php 文件?

c++ - 我可以只包含一个类的特定成员方法吗?

c - 程序在运行时在提供输入时崩溃

.net - 为什么以及在哪里使用 WCF

c - 使用 libxml2 在现有 XML 中附加数据

使用字符串数组调用整数的 1's, 10' s, 100's... 列

include - 在包含路径中使用 Twig 变量