Ich versuche ein Makefile zu schreiben, das ein C-Projekt auf mehreren Plattformen kompiliert, zum Beispiel: CentOS, OS X, OpenSUSE. Ich stehe jedoch auf das Problem, dass Header-Dateien für externe Bibliotheken nicht immer an der gleichen Stelle sind. Ich denke, das liegt an Verpackungen, über die ich keine Kontrolle habe.Wie kann ich externe Header-Dateien, die sich in verschiedenen (unbekannten) Verzeichnissen befinden können, robust einbeziehen?
Zum Beispiel: Während einschließlich der BLAS lapacke.h
der Erklärung auf meiner CentOS Installation erforderlich Include-Datei ist #include<lapacke.h>
. Auf OpenSUSE ist der Weg #include<openblas/lapacke.h>
ich #include<lapacke.h>
verwenden können, dann mit -I/usr/include/openblas
kompilieren, und das funktioniert sowohl auf CentOS und OpenSUSE, aber ich erwarte nicht, dieser Pfad enthalten im Allgemeinen zu arbeiten, weil andere Systeme openblas in einem anderen setzen kann Lage. Wie konfiguriere ich dieses Projekt so, dass es auf den meisten Plattformen kompiliert wird, ohne dass Benutzer manuell mit dem Makefile arbeiten müssen?
autotools wird dies für Sie tun – cleblanc
Sie verwenden den offiziellen Namensstring, wenn Sie die '# include' Zeile schreiben - was die Dokumentation für das Projekt Ihnen sagt zu verwenden. Sie verwenden dann AutoTools ('autoconf',' automake', 'libtool' usw.) und/oder' pkg-config', um herauszufinden, wo die Software installiert ist - oder um dem Benutzer zu ermöglichen anzugeben, wo die Software installiert ist. Du machst es nicht direkt; dieser Weg führt zum Wahnsinn - besonders da es Nutzer gibt (z. B. mich), die darauf bestehen, Software in abgelegenen Orten auf ihrem Computer zu installieren (hauptsächlich, damit die Software nicht im Weg ist, wenn ich sie nicht will) benutzt werden). –