我正在尝试编写一个 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/